基于Socket仿微信系统网络应用课程设计报告
- 格式:doc
- 大小:1.88 MB
- 文档页数:27
摘要随着Internet的飞速发展,网络聊天以其操作简单、方便快捷、私密性好等优点已经迅速发展成为最普遍的网络交流方式之一,越来越受到人们的青睐,丰富了人们的网上生活。
开发并实现具有自身特色的网络聊天系统具有实际应用价值。
本网络聊天系统基于Java应用程序设计,以Client/Server为开发模式,以Eclipse为开发环境,以MySQL为后台数据库,利用JDBC连接数据库。
系统主要包括服务器模块和客户端模块,服务器模块能够对客户端发来的用户信息进行匹配、读取和转发;客户端模块能够进行注册、登录、聊天和文件传输。
系统不但实现了点到点的聊天,还利用Java提供的Socket类和多线程功能,在单个程序中同时运行多个不同进程,从而实现多点对多点的聊天。
总之,该聊天系统具有开放性,实时性,多话题交错等特点,方便了人们网上交流。
【关键词】网络聊天服务器模块客户端模块 SocketABSTRACTWith the rapid development of Internet, network chat with its simple operation, convenient and gond privacy has quickly become the most popular way of communication networks, more and more people like it, enrich people's online lives. Development and Realization of the network chat system with its own characteristics and has practical application value.The Internet chat system is based on Java application, designed by Client / Server as the development of models, as Eclipse development environment, MySQL as the backend database, and using JDBC to connect database. The system includes server modules and client modules, server module can match users'data, read and forward the information which is sent by client; client module to regist, login, chat and file transfer. The system not only achieves peer-to-peer chat, but also use the Java provids Socket class and multi-threading capabilities, in a single program run different processes at the same time, in order to achieve multipoint chat.In short, the chat system is open, real-time and multi-topic staggered features, easy for people to communicate online.【Key words】Network Chat Client Module Server Module Socket目录前言 (1)第一章系统开发工具简介 (2)第一节客户机/服务器模型 (2)第二节JA V A简介 (3)第三节Socket简介 (4)第四节Eclipse简介 (7)第五节MySQL简介 (8)本章小结 (9)第二章系统分析 (10)第一节可行性分析 (10)第二节业务流分析 (11)第三节需求分析 (11)一、系统设计目标 (11)二、系统功能需求 (12)本章小结 (13)第三章系统概要设计 (14)第一节系统总体描述 (14)第二节模块设计 (15)第三节数据库设计 (16)一、设计原则 (16)二、具体步骤 (17)本章小结 (18)第四章系统实现 (20)第一节数据库模块实现 (20)一、数据流图 (20)二、数据库的连接 (20)第二节注册模块实现 (21)第三节登录模块实现 (23)第四节聊天模块实现 (24)第五节文件传输模块实现 (25)本章小结 (27)第五章系统测试 (28)第一节服务器模块测试 (28)第二节注册模块测试 (29)第三节登录模块测试 (30)第四节聊天模块测试 (31)第五节文件传输模块测试 (32)本章小结 (34)总结 (35)致谢 (36)参考文献 (37)附录 (38)一、英文原文 (38)二、英文翻译 (41)前言随着互联网的快速发展,网络聊天软件以它的实时性、高效率和低成本的特质充当了信息交流的媒介,并逐渐成为网络商圈和生活商圈中不可或缺的组成部分[1]。
基于Socket编程的网络应用软件设计一、引言随着互联网的飞速发展,越来越多的人开始意识到网络的重要性。
在这个信息爆炸的时代,网络已经成为人们获取信息、交流沟通、娱乐消遣的重要手段。
为了更好地满足人们的需求,网络应用软件的设计越来越受到人们的关注。
其中,基于Socket编程的网络应用软件设计是一种常见的设计方式,本文将介绍这种设计方式的基本概念、原理和实现方法。
二、基本概念Socket(套接字)是一种网络通信协议,用于实现不同主机之间的通信。
套接字的主要作用是传输数据,因此它通常被用来构建各种类型的网络应用程序。
在基于Socket编程的网络应用软件设计中,套接字是通信双方之间的一个“窗口”,通过这个窗口,双方可以通过网络进行数据传输。
每个套接字都有一个唯一的标识符(IP地址和端口号),它们用来标识发送和接收的数据包。
在使用Socket进行网络通信时,需要指定套接字的类型(UDP或TCP)、协议类型(IPV4或IPV6)和连接地址等信息。
三、基本原理基于Socket编程的网络应用软件设计原理有两个,一是客户端和服务器端之间的通信,二是数据交换与传输。
客户端和服务器端之间的通信:客户端通过套接字向服务器发送请求,服务器接收请求并返回响应,这个过程叫做客户端和服务器端之间的通信。
客户端和服务器端之间的通信可以通过TCP或UDP协议来完成。
数据交换与传输:数据交换与传输是Socket编程的核心内容,也是实现网络通信的基础。
数据交换和传输可以分为两种方式:流式传输和报文传输。
流式传输:使用TCP协议时,数据是以字节流的形式进行传输的。
发送方将数据按照字节的形式发送到网络中,接收方再将其按照同样的字节顺序接收。
由于TCP协议使用了可靠的连接,因此数据传输的顺序不会出现错误。
报文传输:使用UDP协议时,数据是以报文的形式进行传输的。
每个数据包都有一个独立的标识符,接收方可以根据这个标识符来解析数据包。
由于UDP协议不保证数据传输的可靠性和顺序,因此在数据传输过程中需要特别注意。
网络编程课程设计报告课程名称 java程序设计之网络编程题目 Android Socket 聊天室专业信息管理与信息系统班级组长副组长组员指导教师目录5.一、设计目的随着人们对手机的依赖程度越来越深和人们相互之间的交流越来越多,开发一款手机聊天软件便显得尤为重要。
我组开发的手机聊天软件-Android Socket 聊天室不仅可以让人们相互之间的交流变得越来越便捷,而且通过对Android Socket 聊天室的开发,使得我们能更好的掌握网络编程知识,锻炼自己的java编程能力。
二、开发工具和开发环境1、开发工具: Eclipse2、开发环境:JDK三、设计原理1、实现思想Socket是TCP/IP协议上的一种通信,在通信的两端各建立一个Socket,从而在通信的两端之间形成网络虚拟链路。
一旦建立了虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信。
2、服务器端工作流程(1)创建服务器端套接字并绑定到一个端口上(2)套接字设置监听模式等待连接请求(3)接受连接请求后进行通信(4)返回,等待赢一个连接请求3、客户端工作流程(1)创建客户端套接字(指定服务器端IP地址与端口号)(2)连接(Android 创建Socket会自动连接)(3)与服务器端进行通信(4)关闭套接字四、系统流程图五、系统设计本课程设计按照系统的具体功能要求,首先应用Socket编程创建客户端和服务器端,每多个客户端服务器端就会相因的创建一个线程,它们之间通过这个连接来实现数据通信;然后在客户端设置一个监听器,用于监听服务器发来的消息。
并根据消息做出不同的动作。
1、系统功能该系统实现了用户之间的点对点单人聊天,在线用户之间的群聊。
在客户端和服务器端都可以查看历史消息、保存消息、清空消息。
为了监控用户之间的状态,服务器还可以实现踢掉用户的功能,同时用户时间文件传输的信息都会在服务器上显示。
2、系统架构1)选择传输控制协议TCP,使用Java的Socket编程机制,分别建立客户端与服务器端;2)分别设计客户端与服务器端的界面,客户端使用的是用安卓开发界面。
学生学号实验课成绩武汉理工大学学生实验报告书实验课程名称高性能计算机网络实验题目基于Socket的网络聊天程序设计指导老师姓名学生姓名学生专业班级2011 —2012 学年第一学期实验课程名称:高性能计算机网络第一部分:实验分析与设计一、实验内容描述(问题域描述)内容:综合运用网络协议、编程语言、API和图形界面实现基于socket建立、监听、连接、发送数据和接收数据的网络通信程序。
二、实验基本原理与设计(包括实验方案设计,实验手段的确定,试验步骤等,用硬件逻辑或者算法描述)本程序采用基于面向无连接的UDP协议。
需要用到的函数有bind()、 sendto()、 recvfrom()等设计一个基本的网络服务器有以下几个步骤:1、初始化Windows Socket2、创建一个监听的Socket3、设置服务器地址信息,并将监听端口绑定到这个地址上4、开始监听5、接受客户端连接6、和客户端通信7、结束服务并清理Windows Socket和相关数据,或者返回第4步客户端程序框架类似三、主要仪器设备及耗材Windows XP 操作平台Microsoft Visual C++ 6.0 开发环境第二部分:实验调试与结果分析一、调试过程(包括调试方法描述、实验数据记录,实验现象记录,实验过程发现的问题等)上机前编写好代码,用VC 6.0 编译时发现出现链接错误二、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)经分析,应该在“工程”-“设置”-“连接”下的“对象/库模块”中添加“ws2_32.lib”在运行时应该先启动服务器端程序,再启动客户端程序。
源代码以及运行结果截图见附页。
三、实验小结、建议及体会通过本次实验,巩固了自己的编程能力,把课堂上学习到的通信协议用到了实践中,对于各种通信协议的理解很有好处。
不足的的对于图形界面编程能力不足,今后应该在这方面多多下功夫。
服务器端代码:#include <stdio.h>#include <WINSOCK2.H>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData );if (err != 0 ){return;}if (LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion) != 1){WSACleanup();return;}SOCKET sockSrv = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);addrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6666); //设置端口号为6666 bind(sockSrv, (sockaddr*)&addrSrv, sizeof(sockaddr));char sendBuf[100];char recvBuf[100];char tempBuf[200];int len = sizeof(sockaddr);SOCKADDR_IN addrClient;while(1){recvfrom(sockSrv, tempBuf, strlen(tempBuf), 0,(sockaddr*)&addrClient, &len);if('q' != tempBuf[0]){sprintf(recvBuf, "%s say: %s", inet_ntoa (addrClient.sin_addr), tempBuf);printf("%s\n", recvBuf);printf("please input your data: ");gets(sendBuf);sendto(sockSrv, sendBuf, strlen(sendBuf) + 1, 0, (sockaddr*) &addrClient, len);}else // 若接收到'q',则退出聊天{printf("%s request to quit the chat platform.\n",inet_ntoa(addrClient.sin_addr));sendto(sockSrv, "q", strlen("q") + 1, 0, (sockaddr*)&addrClient, len);break;}}closesocket(sockSrv);WSACleanup();}客户端代码:#include <stdio.h>#include <WINSOCK2.H>void main(){WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD(1, 1);err = WSAStartup(wVersionRequested, &wsaData);if (err != 0){return;}if(LOBYTE(wsaData.wVersion) != 1 ||HIBYTE(wsaData.wVersion) != 1 ){WSACleanup();return;}SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, 0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");//htonl htons inet_addr inet_ntoaaddrSrv.sin_family = AF_INET;addrSrv.sin_port = htons(6666); //设置同样的端口号6666 char sendBuf[100];char tempBuf[200];char recvBuf[100];int len = sizeof(sockaddr);while(1){printf("please input your data: ");gets(sendBuf);sendto(sockClient, sendBuf, strlen(sendBuf) + 1, 0, (sockaddr*)&addrSrv, len);recvfrom(sockClient, tempBuf, strlen(tempBuf), 0, (sockaddr*)&addrSrv, &len);if('q' != tempBuf[0]){sprintf(recvBuf, "%s say: %s", inet_ntoa(addrSrv.sin_addr), tempBuf);printf("%s\n", recvBuf);}else // 若接收到'q',则退出聊天{printf("the server has been closed!\n");sendto(sockClient, "q", strlen("q") + 1, 0, (sockaddr*)&addrSrv, len);break;}}closesocket(sockClient);WSACleanup();}运行结果截图:。
编号本本科生毕业设计基于Socket的网络聊天系统开发与设计Development and Design of Networkchat System Based onthe Socket学生姓名张小好专业计算机科学与技术学号1141229指导教师陈晨分院信息工程分院2015年6月摘要在信息技术高速发展的今天,Internet技术的发展已经深刻的改变了人们的生活。
摒弃了原始的通信方式,开发新的通信方式是必不可少的,人们希望用更方便、更廉价、更快捷的通信方式。
这时就需要开发一套网络聊天系统,本课题研究的是基于SOCKET通讯协议的网络聊天系统的开发与设计。
本次开发使用的是JA V A语言,文中介绍了本系统的结构和功能,最终实现可以私聊、群聊、文件传送的网络聊天系统。
本次设计主要以Socket网络通讯作为基础,采用Swing来实现的图形界面。
关键词:Java Socket 通讯协议SwingAbstractIn the information technology rapid development today, the development of Internet technology has profoundly changed people's life. Abandoned the original way of communication, the development of new communication mode is indispensable, people want to use more convenient, cheaper and faster way of communication. Then you need to develop a set of network chat system, this research is based on the SOCKET of network chat system development and design.The development using the JAVA language, this paper introduces the structure and function of this system, finally can private chat, group chat, file transfer network chat system. This design mainly Socket network communication as the foundation, the Swing technique was used to realize the graphical interface.Keywords:Java Socket Communication protocol Swing目录目录 (I)绪论 (1)选题的背景和意义 (1)第一章系统所涉及到的技术 (2)1.1J A V A语言概述 (2)1.1.1 Java语言的起源 (2)1.1.2Java语言的发展前景 (2)1.1.3 Java的语法 (2)1.2S OCKET编程 (3)1.3TCP/IP协议 (4)1.3.1 TCP/IP参考模型 (4)1.3.2 网间协议IP (5)1.3.3 传输控制协议TCP (5)1.4S WING简介 (6)1.5多线程技术介绍 (7)1.5.1在Java中实现多线程。
基于C/S结构的套接字程序设计----通过socket实现服务端功能学院:信息技术工程学院 _ 专业:计算机科学与技术 _ 班级: *班 _姓名:陈***学号: 0123456789指导老师: *** 开课时间:2014年1月12日到1月16日摘要基于C/S结构的套接字程序设计,采用了Client/Server模型, 程序基于TCP协议,通过socket接口来实现的。
服务器端的一个端口用来监听对服务的请求,另外有一个临时端口用来给客户端发送数据,当客户端向该地址提出连接请求时,服务器端会对它的请求做出相应的反应。
当连接成功之后,客户端就可以向服务器端发送数据或接收来自服务器的的数据。
在传输过程中如果出现错误会返回错误信息,并对该信息做出诊断。
引言1、目的及要求(1)目的和意义通过编程了解C/S结构的网络通信模型;掌握基于C/S结构的Windows Socket TCP的程序设计方法。
(2)基本要求按照C/S模型编写两个程序。
一个为客户端程序,另一是服务器端程序;对于C/S两端都应输出必要的日志、出错或诊断信息。
2、研究设想能够实现当客户端向服务器端发送请求时,通过TCP协议(传输控制协议)服务器端能够响应,并能与客户端进行通信。
3、相关理论TCP协议提供的是可靠的、面向连接的传输控制协议,即在传输数据前要先建立逻辑连接,然后再传输数据,最后释放连接3个过程。
TCP协议在网络层IP 协议的基础上,向应用层用户进程提供可靠地全双工的数据流传输。
并且通过创建的流式套接字实现服务端与客户端的数据传送。
流式套接字(SOCK--STREAM):该类套接字提供了面向连接的、可靠的、数据无错并且无重复的数据发送服务。
而且发送的数据是按顺序接收的。
所有利用该套接字进行传递的数据均被视为连续的字节流的并且无长度限制。
这对数据的稳定性、正确性和发送/接受顺序要求严格的应用十分适用,TCP使用该类接口。
4、预期结果通过运用套接字,实现服务器端与客户端的数据传送。
*****《软件综合开发案例教程》课程设计报告课程设计题目小组成员:**,**,**,**任课讲师和助教:**,**2014年 10 月 29 日摘要这个课程设计整体采用在linux平台下,在同一局域网内实现聊天功能。
整体框架主要分为服务端和客户端两个部分,设置好ip和端口号,在Linux下编译和调试两主大块程序,实现服务端和客户端的连接,然后以服务端作为中继转实现客户端之间的通信。
使用socket网络编程采用TCP/IP协议保证连接可靠,并在项目管理中采用linux流行的gcc和makefile编译,提高了编译和调试效率,加快了项目的完成速度。
本次设计的聊天工具采用字符串命令行的方式进行通信,主要实现了五个功能:用户之间一对一的聊天、编辑、换行、用户之间聊天记录保存、聊天记录调取。
经过测试,程序运行可靠,能满足在linux中实现网络聊天的要求。
关键词 linux,socket,gedit,服务端,客户端,网络编程AbstractThe course design of the overall use in the Linux platform, within the same LAN chat functions.Overall framework consists of server and client two parts, set up IP and port number, two main large program under Linux compiling and debugging, to connect server and client, and then turn to the server as a relay to realize the communication between the e the socket network programming using TCP/IP protocol to ensure reliable connect, and using Linux popular GCC in project management and compile a makefile, improve the efficiency of the compiling and debugging, to speed up the completion of the project.The design way of chat tool USES the string on the command line to communicate, has realized the five main functions: the one-on-one chat between users, editing, line feeds, chat records, chat records obtained between users.After testing, the program runs, reliable and can meet the requirements of the implementation in the Linux network chat. Keywords Linux, socket, gedit, server, client, network programming目录摘要 (II)Abstract (II)第一章绪论.......................................................................................... - 1 -1.1、背景......................................................................................... - 1 -1.2、网络聊天的发展状况 ............................................................ - 1 -1.3、Linux系统............................................................................ - 2 -1.3.1 、Linux的简介............................................................... - 2 -1.3.2 、Linux发展历程........................................................... - 3 - 第二章系统应用技术 ......................................................................... - 4 -2.1 、socket概念及功能 ............................................................... - 4 -2.2、socket类型 ........................................................................... - 5 -2.3 、socket函数 ........................................................................... - 5 -2.3.1 、API功能介绍.............................................................. - 5 -2.3.2、套接口地址结构 ........................................................... - 7 -2.3.3、基本转换函数 ............................................................... - 8 -2.3.4、socket编程流程 ............................................................ - 8 -2.4、TCP/IP 协议......................................................................... - 10 -2.4.1、协议概述 ..................................................................... - 10 -2.4.2、TCP/IP层次结构 ........................................................ - 10 - 第三章需求分析 ............................................................................... - 13 -3.1 、功能需求 ............................................................................ - 13 -3.2、性能需求 .............................................................................. - 13 -3.3 、模块划分 ............................................................................ - 13 -3.3.1、界面需求设计 ........................................................... - 14 -3.3.2 、通信需求 ................................................................... - 14 -3.3.3 、数据存储 ................................................................... - 14 -3.4、系统总流程图 ...................................................................... - 14 - 第四章系统测试 ............................................................................... - 15 -4.1、测试说明 .............................................................................. - 15 -4.2、模块测试 .............................................................................. - 15 -4.3、测试结果分析 ...................................................................... - 16 - 第五章设计和实现 ........................................................................... - 16 -5.1、窗体的设计 .......................................................................... - 16 -5.2、实现服务器与客户端的连接 .............................................. - 17 -5.3、聊天功能 .............................................................................. - 18 -5.4、编辑功能的实现 .................................................................. - 19 -5.5、换行功能的实现 .................................................................. - 20 -5.6、数据库的创建与连接 .......................................................... - 21 -5.6.1、MySQL数据库的简介 ............................................... - 21 -5.6.2、MYSQL环境搭建 ...................................................... - 21 -5.7 、显示聊天记录 .................................................................... - 23 -结论................................................................................................ - 25 - 致谢................................................................................................ - 26 -第一章绪论1.1、背景随着Internet的快速发展和普及,网络已经遍布世界各个角落。
《JA V A程序设计》课程设计报告院系题目基于socket 的Client/Server监听模式学生姓名学生学号专业班级指导教师完成时间(空2行)目录1 需求分析 (1)2 系统设计……………………………………………………………………Y 2.1 界面模块设计…………………………………………………………Y 2.2 用户客户端登录验证设计……………………………………………Y 2.3服务器模块设计…………………………………………………………Y 2.4客户端模块设计…………………………………………………………Y2.5数据传输加密设计…………………………………………………………Y3 实现……………………………………………………………………Y 3.1 界面模块实现…………………………………………………………Y 3.2 用户客户端登录验证实现……………………………………………Y 3.3服务器模块实现…………………………………………………………Y 3.4客户端模块实现…………………………………………………………Y 3.5 数据传输加密实现…………………………………………………………YX ×××××(正文第X章)…………………………………………………Y 结论………………………………………………………………………………Y 参考文献…………………………………………………………………………Y 附录A 源代码(必须)………………………………………………………Y正文部分:1 需求分析现在网络通信应用的很广泛,几乎所有应用都基于网络实现通信。
而要实现异地的网络通信,尤其是C/S结构的软件,使用套接字的网络编程是实现双方通信的基础。
本课程设计就是基于Java TCP客户端和服务器、UDP组播实现的群聊。
1.1 基本功能需求以下三点是本课程设计的基础功能实现,即要完成基本的客户端-服务器的连接通信。
网络编程实训课程学习总结基于Socket的多人聊天室开发在网络编程实训课程中,我学习了基于Socket的多人聊天室开发。
本文将总结我在学习过程中的收获和体会,并对实训课程进行一些反思和建议。
一、引言网络编程是现代计算机科学中非常重要的一个领域,它涉及到如何在不同的计算机之间进行通信和数据交换。
而Socket则是网络编程中常用的一种编程接口。
本次实训课程通过基于Socket的多人聊天室开发,使我们更加深入地了解了网络编程的原理和实践。
二、实训内容在实训课程中,我们首先学习了Socket编程的基本知识,包括Socket的建立、数据传输和断开等。
随后,我们开始实践基于Socket 的多人聊天室的开发。
通过分析需求,我们设计了聊天室的功能模块和用户界面,并使用Python编程语言进行开发。
三、学习收获1. 深入理解了网络编程的原理:通过实践,我更加深入地理解了网络编程的原理和过程。
我了解到Socket编程是通过TCP/IP协议栈实现的,而客户端和服务器之间的通信则是通过套接字(Socket)进行的。
2. 掌握了多线程编程:为了实现多个用户同时在线聊天的功能,我们采用了多线程编程的方式。
学习了线程的创建、管理和同步等技术,使得我们能够更好地实现多人聊天室。
3. 提升了团队协作能力:在开发聊天室的过程中,我们需要与团队成员紧密合作。
通过分工合作、协商解决问题等方式,我们体会到了团队协作的重要性,并在实践中逐渐提升了团队协作能力。
四、实训反思与建议在实训过程中,我发现了一些可以改进的地方,并提出了一些建议:1. 更加注重理论与实践结合:在学习网络编程的过程中,希望能够更加注重理论与实践的结合。
例如,在学习Socket编程的基本原理时,可以提供更多的实际案例进行演示。
2. 加强技术支持与指导:对于初学者而言,网络编程可能会遇到一些技术上的困难。
因此,希望在实训过程中能够加强技术支持与指导,及时解答学生的疑问。
3. 提供更多实际应用案例:除了多人聊天室的开发,希望在实训课程中能够提供更多实际应用案例。
JAVA程序设计课程设计报告课题: 基于Socket的聊天程序姓名:骑蚂蚁去流浪学号:0213同组姓名:专业班级:计科0912班指导教师:刘国清设计时刻:2012年上学期第01周评阅意见:评定成绩:指导老师签名:年月日目录一、前言 (2)二、课题概述 (2)(一)课题概述 (3)(二)相关技术 (3)三、系统设计 (3)(一)需求分析 (4)(二)系统功能 (5)(三)系统架构 (6)(四)模块设计 (7)四、详细设计与实现 (8)(一)服务端设计 (8)(二)客户端设计 (9)(三)辅助类设计 (10)五、系统运行结果 (11)六、结论与总结 (13)(一)课程设计结论 (13)(二)课程设计总结与体会 (14)七、附录 (15)一、前言Java课程设计是运算机科学与技术专业学生必做的集中实践性环节之一,是学习完《Java程序设计》课程后进行的一次全面的综合练习。
其目的在于通过课程设计,能够取得较系统的技术训练,从而巩固和加深对Java 编程的基础理论知识的理解,提高综合运用所学理论解决实际问题的能力,成为具有扎实的运算机理论基础和较强的独立动手能力的复合型、应用型人材。
二、课题概述、课题概述现今社会,网络技术愈来愈进展,能够说,二十一世纪就是网络的世纪。
网络迅猛进展,势不可挡。
为了实现资源共享,各式各样的网站进展迅速,各类各样的聊天工具不断更新。
本次课程设计选择一个以JAVA语言实现一个基于Socket的网络聊天室程序。
本系统提供一个网络交互平台,各用户之间能够实时方便的传递信息,能够在聊天室里实现群聊。
本系统主如果利用JAVA语言基于Socket通信机制制作的一个聊天室,采用的是客户/服务器。
二层的C/S结构是指以单一的服务器和局域网为核心,能通过客户端与用户进行直接对话。
为利用户能直观地进行操作,一般要利用图形用户接口(GUI),操作简单、易学易用。
在变更用户接口时,只需改写显示控制和数据检查程序,而不影响其他。
一. 设计目的1.掌握网络应用设计的方法和步骤;2.掌握用户需求分析的方法和设计文档的编制方法;3.掌握应用开发辅助软件的使用方法;4.掌握数据库设计方法;5.掌握通信协议的特点,消息格式设6.掌握软件测试的基本流程。
二. 设计内容随着网络的快速发展,社交网站也变得越来越普及,人们不必再去花费大量的时间和精力去参加社交活动所,只要通过互联网便可拥有自己的朋友圈。
仿微信系统基于Socket实现C/S架构完成系统搭建,安卓端作为客户端,服务器端采用多线程响应每个客户端,在服务器端有用户注册到数据库,存储转发客户端相关消息。
客户端界面与功能完成微信官方客户端的部分常用功能,包括语音实现,消息实现,图片实现等。
主要完成一个具有实用价值的网络应用程序,该应用中应包括:图形化界面、套接字通信、多线程处理、相应的业务处理逻辑等。
对于该系统:第一,通讯基础模块的快和省。
手机社交产品种类很多,包括手机IM、SNS、图片分享、位置交友等。
而这些社交产品都有一共同的功能:通讯,这是手机社交产品最为基础的功能。
而用户对通讯的要求非常简单,那就是要快和省。
因此所有手机社交类产品开发准则第一条就是:通讯基础模块的快和省。
如果没有这一基础,其他的功能都妄谈。
第二,交互设计要轻和简洁由于社交类应用,都牵扯到用户的交互,而交互的设计必须轻和省。
所谓轻,就是要尽可能减少产品的层次,最好只有一层,并可以通过滑动触控迅速在各功能之间切换;所谓省,就是要求一步可以完成的操作,不要让用户做2步。
目前,新浪微博手机客户端的交互就存在很大问题。
由于评论与转发分别提醒用户,导致一个内容用户看2次,刷新2次微博,浪费时间和流量,没有做到轻;而评论功能,则需要做2步才可以完成,没有做到省。
第三,手机社交产品都应具备LBS功能SoLoMo作为互联网与现实之间的桥梁,可以让用户轻松的从线上走到线下,这也是互联网从虚拟走向现实的开始。
一款社交产品,如果只有线上的沟通,时间久了,用户会感觉到无价值,而一旦整合LBS功能,则让其社交的价值更加实在,更容易落地。
而且通过LBS功能,还可以与身边的各类生活服务相结合,对用户生活带来巨大帮助。
比如,手机QQ的查看附近的人和查看附近的商家,就是社交+LBS的应用。
第四,读图时代来临,“轻社交”盛行例如Instagram卖了10亿美元,这被认为是移动互联网市场的最大黑马,而其快速发展的原因在于用户可以通过这个简单的软件分享自己的照片。
有数据显示,facebook中70%的信息是图片信息。
用户随手拿起手机,拍一张照片,然后通过分享与朋友、陌生人互动,这其实触动了用户show的神经,而每个人都有show的欲望。
目前,快速发展的path,微博的美图精选,甚至是手机QQ都加入个人名片图片墙,微信的朋友圈,其实都看中了读图的巨大市场前景。
而图片加上简单的文字,构成了轻社交,而用户对这些照片,或许只是一个“赞”,一个表情符即可表达自己的观点。
用户越来越懒惰,而share和show却越来越疯狂,我想这正是“轻社交”时代的标志。
总之,社交软件的兴起不是偶然的,满足大多数网名的需求。
三.概要设计本系统中提供以下功能:●客户端首先注册登录名和密码,服务器将此信息保存在XML文件中;●客户端通过登录的方式进入应用;●客户端获得已在用户列表权限;●客户端默认发送的信息为公开信息;●客户端可以选择消息的接收者;●客户端可以发送字符消息,语音消息,图片表情给指定接收者;●服务器端管理用户信息;●服务器端向客户端转发消息;●服务器端采用多线程的方式来响应客户端连接;C:android平台实现 S:java project实现1.功能模块图图1 仿微信系统功能模块图2.各个模块详细的功能描述①注册:服务器端中增加一个用户的信息,客户端需要填写用户名、头像图片等基本信息。
②登陆:用户提交IP,端口号,用户名进行登录③验证:服务器端接收到用户信息与数据库内容比对进行验证④文字发送:Client1向Client2发送“hello”,数据流程为 Client1→Server (解析消息内容,查找接收者Client2的写线程)→Client2,这样就能准确的将消息发送到Client2。
⑤语音发送:发送端有三个主要的类:AudioRecorder(负责音频采集),AudioEncoder(负责音频编码),AudioSender(负责将编码后的数据发送出去);这三个类中各有一个线程,录制开始后,这三个线程一起运行,分别执行各自的任务, AudioRecorder采集音频后,添加到AudioEncoder 的音频数据的List中,而AudioEncoder 的编码线程不断从List头部取出数据,调用ilbc 的底层\函数进行编码,编码后的数据则又添加到下一级的AudioSender 的 List中,AudioSender又不断从头部取出数据,然后发送出去。
⑥图片发送:client上传图片给服务器,然后转发给各个客户端。
四.详细设计1.功能函数的调用关系图Server端:图1 User类关系图图2 Constant类关系图3 Server类关系图4 工具类关系图5 仿微信系统服务器端功能函数图②信息类:User类用户信息Message类消息C ontentFlag 内容标识类,区分不同的消息类型③主类:MainServer类启动服务器④业务逻辑类:ChatServer类服务器Socket处理chatServerTask类Quit()服务器终止,关闭所有线程start()服务器启动SocketTask()内部线程类,负责与个客户端的数据通信sendMsg()发送消息run()// 处理注册消息//处理登录消息//将聊天室其它所有在线用户的头像数据缓存到该登录用户客户端//加载用户头像资源//循环向连接的每个Socket客户端发送登录消息//处理录音消息//循环向连接的每个Socket客户端发送消息//处理普通消息//处理退出消息Client端:图6 仿微信系统客户端功能函数图①适配器类: ChatMsgViewAdapter 聊天页面ListView内容适配器 ExpressionGvAdapter表情页面GridView内容适配器② 工具类 : ExpressionUtil 正则表达式处理工具类,用来处理表情信息 FileDealTool 文件处理类StreamTool 获取要从流中读取的数据长度,网络流数据格式 SystemConstant 配置常量③消息标志类:ContentFlag 内容标识类,区分不同的消息类型④消息接口:Message User⑤服务类: 1.MessageService 类startConnect()建立连接quitApp() 应用退出receiveMsg()接收消息saveRecordFile()保存录音文件parseJsonToObject()解析json字符串 sendMsg()发送消息sendRecordMsg()发送语音消息2.RegisterService类 registerUser()注册用户erService类负责用户登录的业务类⑥接口类: IhandleMessge接收并处理消息的接口⑦数据库帮助类:MessageDbHelper UserDbHelper⑧业务逻辑类:Appstart()ChatActivity()UserLoginActivity()UserRegisActivity()WelcomeActivity()2.各功能函数的数据流程图3.重点设计及编码A.数据库设计用户信息表B. 流程设计C:消息格式设计在服务器端发送的消息用户登录消息Class msg implments Serializable{ String userID;String userPWDString imageID;}聊天室消息#senderID#receiverID#content#sendTimeD:核心编码送端有三个主要的类:AudioRecorder(负责音频采集),AudioEncoder(负责音频编码),AudioSender(负责将编码后的数据发送出去);这三个类中各有一个线程,录制开始后,这三个线程一起运行,分别执行各自的任务,AudioRecorder采集音频后,添加到AudioEncoder 的音频数据的List中,而AudioEncoder 的编码线程不断从List 头部取出数据,调用ilbc 的底层\函数进行编码,编码后的数据则又添加到下一级的AudioSender的List中,AudioSender又不断从头部取出数据,然后发送出去;由于采用的是Socket连接Tcp协议,所以必须有一台服务器充当Server,由于客户端和服务器是多对一的关系,所以服务器端需要为每个建立连接的用户分配一个线程,因此考虑使用线程池管理多线程以提高效率。
服务器核心内容如下图所示。
Client1向Client2发送“hello”,数据流程为Client1→Server(解析消息内容,查找接收者Client2的写线程)→Client2,这样就能准确的将消息发送到Client2。
ServerManager类实现对Socket的管理,类实例化后就循环监听客户端发送的链接请求,此处accpet()阻塞等待,知道有链接进来后才往下执行,为链接进来的socket连接分配相应的读写线程,并以HashMap<k,v>记录线程每个用户对应的OutputThread,方便后面服Server对消息进行反馈和转发为方便开发,Socket的IO读写采用了ObjectOutputStrem和ObjectInputStream,简单看下Socket通讯模型设定消息协议,服务器和客户端都根据协议发送消息,例如LOGIN表示登陆,此处理论上用enum比class更规范,但是由于Socket读写是用的Object流,读写的对象必须序列化,而且对象中变量类型必须都为Java基本类型,故只能用int 了。
定义好消息对象模型。
通过读线程,不断地读取客户端发来的消息,并根据不同的消息类型,进行相应的处理写线程,内容简单、工作单一,随时准备着往socket里写信息,外部通过setMessage()方法,唤醒线程,写完之后线程继续等待五.测试数据及运行结果1.正常测试数据和运行结果客户端:c服务器端:2.异常测试数据及运行结果六.调试情况,设计技巧及体会1.改进方案对自己的设计进行评价,指出合理和不足之处,提出改进方案;2.体会对设计及调试过程的心得体会。
七.参考文献[1] 作者. 书名. 出版社. 出版年[1] 朱辉,李刚. JA V A网络程序设计. 西安电子科技大学出版社. 2012年八.附录:源代码(电子版)。