计算机网络课程设计报告5541819319.doc
《计算机网络课程设计报告5541819319.doc》由会员分享,可在线阅读,更多相关《计算机网络课程设计报告5541819319.doc(38页珍藏版)》请在三一办公上搜索。
1、基于Java简单的聊天程序摘要 随着网络越来越流行和大众化,各种网络工具也逐渐走入生活中,它让我们的生活更加方便快捷,所以对于网络工具的开发与应用需求就更加迫切。互连网对我们老百姓的生活更是产生了巨大的影响。信息与人类的生存更加休戚相关,人们一时一刻也离不开信息,无时无刻不在与信息打交道,不断的利用信息为自己的生存和发展服务。在不知不觉中,以互连网为主要标志的信息化已经给人类生活、学习、办公、够物、出行、就医、娱乐等带来深刻影响。其中聊天工具为我们开拓一片广阔的网络天地,这使我们的交流变得更加方便,也节约我们很多的资源。本次课程设计中,我们用到基于Java的Socket通信,基于VE可视化编程
2、插件,Swing组件等。此外我们自定义了协议(套接字),首先是登陆(只用到了用户名),然后就是发送消息和传送文件两大功能,当同时进行的时候,需要用到多线程:一个线程处理文件传输,另一个线程处理消息发送。在服务器端,对消息的处理、解析也是用到多线程,因为当接到一个消息请求以后,必须把它交给一个线程处理,否则服务器将没有机会继续监听,这样就会使其他用户得不到响应,导致系统的处理效率很低,所以我们的设计主要以尽量提高效率和友好的用户操作界面为主。小组具体分工:秦川:主要负责Server服务器程序的编写和协议的设计,并参与任务书的一部分刁俊方:主要负责Client客户端的编程和界面的设计,并参与任务书
3、的一部分钟杨杨:和刁俊方一起编写客户端和设计界面,也参与任务书的一部分总的来说,本次课程设计我们小组还是以合作为主,大多数思想都是经过大家讨论得出的设计方法,整体的架构设计也是编写程序之前商量建立好的,程序结构是也是开发初期、中期以及后期一起研究,毕竟我们分开写的代码,所以组合的时候需要修改一些内容,这时必须在一起讨论。只是说写代码的时候完全分开写,这样有利于各类算法的设计,编写起来更加得心应手。一、 总体分析1.1课程设计要求通过计算机网络课程设计,旨在通过该课程设计,使学生了解、掌握TCP、UDP协议的原理;了解、掌握Socket编程的方法;了解、掌握应用协议设计的思想;利用Winsock
4、 API或者Java Socket API编制一个能部署在Internet上的点对点数据交换(P2P)、HTTP/FTP服务器系统、共享白板。要求每组学生(23人/组)从上述3个系统中任选一个,独立完成系统的功能设计和实现,使所实现的系统可以能够包含主要的内容要求,并要求学生必须在报告中明确具体分工情况。1.2学生完成的工作分组 23人/组。 内容:协议编程。语言:Java或C+。3个题目任意两个一组供一个班级选择。1) 点对点数据交换(P2P):实现基于服务器转发的任意多点间的数据共享与交换。2) HTTP/FTP服务器系统:HTTP/FTP客户端系统和HTTP/FTP服务端系统。3) 共享
5、白板:实现基于服务器转发的多点间的文字,简单图案等信息的远程实时共享。1.3设计背景在今天的生活中,我们深刻的体会到我们离不开网络,我们可以利用网络完成很多有意义的事,可以说网络给我们带来了太多的方便,使我们的生活丰富多彩,在我们的生活中发挥着极大的作用,它改变了传统的生活方式,使我们的生活上升了一个档次。,而在这其中,有一个千千万万人都离不开的东西-聊天工具,而且各种各样的聊天工具如雨后春笋般诞生,技术也越发成熟,非常著名的QQ等产品发展日新月异。因此,基于我们实际的知识结构构成以及网络聊天在当今时代的盛行趋势,本课程设计小组选择了课程设计题目点对点数据交换(P2P),用于实现基于服务器转发
6、的任意多点间的数据共享与交换。其具体设计内容如下:1)类似P2P的QQ聊天系统,有客户端和服务器端。2)服务器端记录当前在线客户列表,把客户列表发送给每一个在线客户,并实时刷新。3)任一个客户可以和任意其它的客户进行交互,即从在线客户列表中选择一个或一组其它客户通过服务器转发彼此进行交互,包括信息交互,文件交互(文件传输)。1.4开发环境与工具根据老师的要求,我们选择了作为目前Internet上最为流行的编程语言之一的Java语言作为编程工具,并选择可扩展的免费开放源代码集成开发环境eclipse-jee-helios作为开发平台和使用VE可视化设计编程。由于Java语言的网络特性,与其他语言
7、相比,使用Java编写网络通信程序变得非常简单和便捷,本课程小组选择了Java Socket API来编制这个能够部署在Internet上的点对点数据交换(P2P),整个程序是基于Windows7平台开发的。二、总体设计2.1总体设计概念为实现网络聊天的功能,采用Java Socket编程,服务器与客户端采用了TCP/IP连接方式。在执行过程中,我们设计将所有请求信息先发往服务器端,再由服务器进行分别处理,决定下一步应该怎么做,服务器会对不同的数据包进行不同的处理,比如登录、发送消息、发送文件等,可以说服务器端是所有信息的中转站。2.2系统结构本课程设计按照实验的具体要求,采用C-S结构,首先
8、用Socket编程创建客户端和服务器端,它们之间通过一个交互的连接来实现数据通信;在服务器端有一个监听程序,用于监听客户端的消息请求,实现他们的连接。当传输文件的时候,客户端也会建立一个监听程序,来监听其他客户端的连接请求,因为我们在传输文件的时候是设计的在客户端之间直接传送,此时服务器端只做一个消息转发器。2.3界面和功能1)界面本系统只有一个界面,那就是客户端界面,服务器只提供相应的消息处理机制,所以没有制作服务器界面,它不参与客户之间的聊天内容。我们采用VE可视化编程插件,利用Swing包进行窗体界面的设计,实现其部分时间。2) 服务器端:主要实现处理客户端发来的请求数据包,不同的信息不
9、同处理,或帮助转发。具体功能如下:1、刷新昵称列表:在有用户登陆或离开的时候实时更新用户昵称列表,并将信息反馈到各个客户端,让它们也更新用户列昵称表;2、监听功能: 实现对客户端发送过来的消息进行监听的功能;3、登陆管理:检查是否有同名用户,若有则提示用户已存在,若无则发消息通知所有用户,同时刷新在线用户昵称列表;4、消息处理:解析客户端与服务器端的消息交互类型,并做出相应处理,能够找到消息所对应的接收端。5、注销管理:当用户注销的时候,发消息通知所有用户,刷新在线昵称列表。3)客户端:主要实现向服务器端发布消息请求,并且对来自服务器和其他客户端的消息做出相应的响应。具体功能如下:1、连接功能
10、:输入用户名,实现登录及注销功能2、登录设置:登录时,发送消息使服务器端获得相关登录信息,昵称及IP地址记录到服务器端的Array列表中,注销后发送消息使IP地址及昵称从Array列表中删除;3、监听作用:实现对其他客户端发送过来的消息进行监听的功能;4、聊天记录:实现聊天记录的保存功能;5、消息处理:相应从服务器端接收到的消息交互类型,实现用户与用户之间的信息交互和文件交互;6、文件传输:实现客户端之间的文件传输与文件接收功能。三、 详细设计3.1协议结构在Java socket通信中使用的协议是TCP协议。TCP协议是TCP/IP协议中面向连接的运输层协议,它提供全双工的和可靠交付的服务。
11、由于通信是全双工方式,因此TCP连接的任何一方都能够发送和接收数据。发送端的应用进程按照自己产生数据的规律,不断地将数据块(其长短可能各异)陆续写入到TCP的发送缓存中。TCP再从发送缓存中取出一定数量的数据,将其组成TCP报文段逐个传给IP层,然后发送出去。接收端从IP层收到TCP报文段后,先将其存在接收缓存中,然后让接收端的进程从接收缓存中将数据块逐个读取。 TCP协议的报文分为首部和数据两个部分。众所周知首部中含有源端口、目的端口、序号、确认号等内容。因此在利用socket通信时,要想实现不同的功能和数据传输,包括指令和纯数据的传输,可以通过在TCP报文的数据部分进行再分段来实现。由此指
12、定一些套接字,并接利用这些套接字来对不同的数据进行分段,这样就能轻松地将提取所需数据以实现不同功能。本课程设计正是利用上述方法来建立一个基于TCP协议的协议。这个协议的主要组成部分为套接字及数据段。在程序中主要使用的套接字有:LOGIN、LOGOUT、TEXT、FILE、ADDR、ACK、SEND、WRONG等。其中各个套接字又有不同的使用方法。如果使用的是LOGIN,则其后数据为发此数据者登录用的昵称。如果使用的是LOGOUT,则其后数据为发送此数据客户端要注销用户。若套接字为TEXT,则表示该用户发出了一个对一的客户消息传送请求,此时,服务器端同样通过控制字头后的昵称,查找到对应的接收端用
13、户信息,并将该消息转发给对应的客户端用户。若套接字为FILE,则表示该用户发出了一个文件传输请求,此时服务器同样通过控制字头后的昵称,查找到对应的接收端用户信息,并获取起IP地址,传给发送端,发送端根据该IP,直接和等待和该接收端建立Socket通信,而接收端则根据得到的发送端IP请求建立连接。若套接字为ADDR,则表示服务器发送给客户端的数据包是IP地址。若套接字为ACK,则表示是一个请求的相应回答报文。若套接字为SEND,表示文件开始传输的消息。若套接字为WRONG,则表示消息发送或文件出错,也可能是其他引起的错误。具体的格式为:套接字+From+源用户名+to+目的用户名+to+数据内容
14、。使用套接字的方法能够把控制信息和数据部分一起传送达到服务器和客户端的不同沟通,这样我们就可以利用服务器来完成我们所需的各个服务,无论是文件传输还是私下聊天都可以,同时还能在某种意义上保护隐私。这个socket的协议就是利用TCP协议的数据流、面向连接和全双通来实现的。3.2数据流程图根据以上的程序模块划分,设计好服务器端和客户端的流程图,如下:服务器端流程: 客户端流程图:四、 系统实现编码及运行结果4.1服务器端设计与编码4.1.1 服务器程序该段功能由Server工作组中的Servercontrol包中的Server.java文件中的Server类实现(程序代码请见附录),具体实现过程如
15、下:启动服务并监听:服务器的任务首先是建立一个由IP地址到昵称的映射的哈希表,用于存放用户的基本信息;启动服务器后,等候建立一个连接,然后用这个连接产生的Socket创建一个Client,同时检查该用户是否已存在哈希表中,若以存在,则提示该次连接请求失败,从而实现限制IP的目的;若不存在,则将该IP地址及其昵称或默认昵称的映射添加到哈希表中,接着服务器端向所有的用户发送管理信息,提示有新的用户登录,并且将刷新后的用户列表同时发送到各个客户端。接受和发送消息: 服务器端解析由客户端发送的请求,若控制字以LOGIN开头,则通过控制字后的昵称从Array列表中找到对应的用户,实现服务器端到客户端的点
16、对点消息交互;在服务其中,需要同时处理多个客户端的请求,因此此处用到了多线程处理机制。在服务器程序里创建单个Server Socket,并调用accept()来等候一个新连接,一旦accept()返回,就取得结果获得的socket,并用它新建一个线程,令其只为那个特定的客户端服务,然后再调用accept(),等候下一次新的连接请求。 4.1.2主要的功能函数该段功能由ServerManage.java文件中的ServerManage类实现(程序代码请见附录),它是一个线程类,具体用来处理服务器响应请求后,把任务交给一个线程来处理,而自己继续监听。主要实现过程如下:函数ServerManage:
17、该函数实现监听到一个请求后,建立一个Socket类型的变量,并定义给出输入输出数据流,转入线程。函数原型如下:public ServerManage (Socket s) throws IOException函数broadcast:该函数实现把服务器收到的信息以广播形式发送给所有在线用户,函数原型如下:Public void broadcast(ServerProtocol msg) throws IOException函数run:该函数实现消息已经进入了线程处理、解析过程,以得到响应的后续处理方法,函数原型如下:Public void run()类ServerProtocol.java文件是
18、包含的协议:函数ServerProtocol:该函数是关于协议的设计与说明,本系统就是用的套接字,函数原型如下:public ServerProtocol(Socket socket) 类UserInfo是有关每个用户基本信息的保存类,主要是用的ArrayList来实现:其中只包含一个UserInfo方法,就是用来保存昵称等信息的。4.1.3信息处理客户端几乎所有信息都是交给服务器的Service负责接受这些信息,并且做出相应的处理。该段功能由Service.java文件中的Service类实现(程序代码请见附录),具体实现过程如下:该类仍然是使用了Java的多线程处理机制,用来响应处理每个客
19、户端的请求,还有就是当传输文件和发送消息同时进行的时候也要用到多线程。当接到请求后转入线程,进行消息类型的判断:如果控制字以LOGIN开始,则表示该用户登录,将其昵称广播给每一个用户,并更新用户昵称列表。如果控制字以LOGOUT开头,则表示该用户以注销,则在用户昵称列表中删除记录,并广播给所有用户,更新用户昵称列表。若控制字以FILE开始,则表示该用户发出了一个对某一客户端发送文件的请求,此时,服务器端同样通过控制字头后的昵称,查找到对应的接收端用户的信息,并将该用户的IP地址传递给发送端,接下来的工作就交给客户端之间处理。若控制字以TEXT开始,则表示用户之间在发送消息,服务器只需要将其转发
20、给目的客户端。4.2客户端设计与编码由于服务器端需要一次处理多个客户端的请求,所以客户端的设计均使用了Java的多线程处理机制实现。4.2.1客户端程序该段功能由ClientControl包中的Client.java文件中的Client类实现(程序代码请见附录),具体实现过程如下:新建客户端:初始化该客户端的监听器、套接字、在线用户列表以及发送消息的String流,并且将客户端连接状态设置为真。初始化一个客户端时,需要用到该客户端的IP地址、端口号、在线用户列表以及聊天内容列表等信息。发送消息:客户端循环发送消息给服务器,直到发送的String流遇到结尾字符。4.2.2界面设计该段功能由Mai
21、nwindow.java文件中的Mainwindow类实现(程序代码请见附录),具体实现过程如下: 窗口布局:服务器端窗口使用了BorderLayout事务管理器,并取消了其布局,而使用我们自定义的布局,在上面放置我们自设的组件,如按钮、标签、文本框、列表、文件菜单等,各个组将构成了一个完整的服务器端界面。如图4-1所示:图4-1 事件处理:通过Java的授权事件模型,针对组件TextArea、Button1Button4,通过addListener(主要运用了addActionListener)方法注册监听器,并且实现ActionListener接口中的actionPerformed方法,这
22、样,当组件触发了相应类型的事件后,此事件就会被传送给已注册的监听器,事件监听器负责处理事件。至此,实现了窗口对以下几个事件的响应:用户登录、退出、保存消息、文件发送、文件接收、文件开始传输、消息发送。4.2.3文件发送该段功能主要实现文件发送,默认端口为4040,由FSend.java文件中的FSend类实现(程序代码请见附录),具体实现过程如下:初始化:使用接收端用户的昵称、需要被传输的文件绝对路径以及聊天记录列表初始化FSend相应的属性。用需要被传输的文件名新建一个文件输入流,通过该文件输入流新建一个缓冲输入流,用于缓冲文件输入数据;同时使用接收端用户的IP地址以及端口号新建一个套接字,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 课程设计 报告 5541819319

链接地址:https://www.31ppt.com/p-2401514.html