1、网络课程设计 JISHOUUNIVERSITY专业课课程论文题 目:基于TCP协议聊天室系统作 者:学 号:所属学院:信息科学与工程学院专业年级:总 评 分:完成时间:吉首大学信息科学与工程学院摘 要当前是数字信息时代,网络时代,任何一种编辑工具都不能忽视在网络上的应用,并且随着Internet 的普及和宽带技术的成熟,越来越多的用户进入网络世界中享用浏览新闻、查询信息、发送邮件、在线观看电影等服务,享受网络带来的便利和办公的高效,与此同时一个新型的Web应用程序为网民之间提供了一个实时通信的功能和场所,这就是聊天室,在此设计了一个简单的基于TCP协议的聊天室。服务器端:启动、停止服务器;显示
2、当前客户端链接信息;向所有客户端传送服务器公共信息;实现客户端双人和多人聊天功能。客户端:聊天服务器配置信息的修改、保存;客户端链接服务器的登录;接收服务器公共信息;显示当前所有聊天用户信息;选择聊天用户实现双人或多人聊天功能。关键字:聊天室、TCP协议;AbstractThe current is the digital information age, the network era, any kind of editing tools can not be ignored in the application on the network, and with the popularity
3、 of Internet and broadband technology matures, more and more users into the network in the world to enjoy the news that browse, query information, send e-mail, online movie service, enjoy the convenience brought by the Internet and office efficiency, at the same time a new Web app for Internet users
4、 to provide a real time communication function and places, this is a chat room, in the design of a simple protocol based on TCP chat room. Server: start, stop the server; displaying the current client links to all the client server information; public information; the realization of client double an
5、d chat with people. Client: chat server configuration information changes, save; client linked server login server; receiving public information; displaying the current chat all user information; the selection of chat users realize the double or chat with people. Keywords: chat rooms, TCP protocol;
6、目录摘 要 IAbstract II第一章 需求分析 11.1用户需求 11.2需求环境 11.3聊天室的功能描述 1第二章 概要设计(总体设计) 22.1流程图 22.2聊天室的功能设计 22.2.1定义类Server.JAVA 22.2.2定义类ServerConnection.java 32.2.3类ServerMessageThread 用来处理用户的聊天信息 32.2.4类Client 主要为界面设计 32.2.5类ClientConnection 32.2.6类ChatClient 聊天主窗口界面 42.2.7 ChatPerson 输入聊天对象 42.2.8 ChatOneToO
7、ne 用于发送私聊信息 4第三章 系统实现及测试运行界面 53.1服务器端实现的主要代码 53.1.1服务器监听指定的端口 53.1.2向客房端发送信息 63.2客户端实现的主要代码 63.2.1连接服务器 63.2.2向服务器发送数据 73.3测试运行界面 83.3.1启动服务器界面 83.3.2客户端登录界面 93.3.3群聊界面 93.3.4输入私聊对象界面 103.3.5输入私聊信息界面 103.3.6私聊对象收到信息界面 10第四章 相关知识 114.1Socket 类 114.2 TCP协议 114.3Server-Client模型的程序的开发原理 11第五章 课程设计总结 13参
8、考文献 14第一章 需求分析1.1用户需求(1) 服务端: 用户能启动和停止服务器(2)服务端:用户能修改服务器接口(3)服务端:用户能看到当前客户端的信息(4)客户端:用户能看到服务端传来的信息(5)客户端:用户能修改,保存服务器的配置信息(6)客户端:用户能看到所有聊天用户信息(7)客户端:用户可以和指定的人聊天1.2需求环境本课程设计需要的设备为硬件要求和软件配置要求具体要求如下:硬件要求:一台计算机。 软件配置:windows XP或windows 7、MyEclipse 9.0。 1.3聊天室的功能描述 本课程设计是基于TCP协议的聊天室系统,其基本的功能描述如下:1 启动和停止服务
9、器,能显示用户信息,能向客户端发送所有用户信息,能向用户发送客户端传送的信息。2 启动和关闭客户端,能接受并显示服务器发送来的客户信息和聊天信息,能和某个用户通过服务器中转进行双人聊天 第二章 概要设计(总体设计)2.1流程图2.2聊天室的功能设计2.2.1定义类Server.JAVA 设计服务器界面,在Server中能设置服务器的端口,显示用户列表信息,并将port信息传递给用来连接客户端的类。1.用方法initComponents()来初始化服务器界面,并向XML传送服务器窗口关闭信息。 2.用方法execute(ActionEvent evt)获得用户输入的端口号,并创建ServerCo
10、nnection(Server server,int port)对象。 2.2.2定义类ServerConnection.java 用来连接客户端,并对用户登录做判断, 在本类中将会生成socket用来处理各种信息。 1.用构造方法来获得用Server类传递的端口,并初始化ServerSocket。 2.方法run()来获得客户端发送的连接信息,并对用户登录做判断,如果登录成功将会创建新的线程,用来处理用户的聊天数据,并将用户的信息添加到MAP()中,调用updateUserList()对客户端和服务器断的用户列表做更新。2.2.3类ServerMessageThread 用来处理用户的聊天信
11、息1. updateUserList()用来更新用户列表2. sendMessage(String message)用来发送信息3. run()获得客户端发送来数据,并用XML解析消息类型,调用sendMessage()方法将消息发送出去,主要处理多人聊天和双人聊天和关闭窗口2.2.4类Client 主要为界面设计1.initComponents()用于初始化界面2.login(ActionEvent event)获得并提交用户信息包括用户名、端口号、IP地址以及创建连接服务器线程2.2.5类ClientConnection1.构造方法 接受类Client传递的信息,调用connect2Ser
12、ver创建线程获得输入输出流2.login()向服务器发送用户登录信息,读取服务器的响应结果,用XML对用户信息进行解析3.sendMessage(String message,String type)用于客户端向服务器端发送聊天数据(发送聊天数据,关闭窗口,向服务器发送数据)4.run():调用XML的 extractUserList(String xml)方法解析type值处理相关信息2.2.6类ChatClient 聊天主窗口界面1.对3个按钮分别添加事件,发送按钮 调用sendMessage()方法,清屏按钮调用setText()对聊天窗口的信息进行清除 私聊按钮启动私聊窗口2.sen
13、dMessage(ActionEvent event) 获得聊天数据2.2.7 ChatPerson 输入聊天对象1.init()主要设计界面,2.向ChatOneToOne 传递聊天对象2.2.8 ChatOneToOne 用于发送私聊信息1.init()初始化界面2.sendMessage(ActionEvent event)用来获得用户输入的私聊信息,并将信息保存在XML里面,等待解析第三章 系统实现及测试运行界面3.1服务器端实现的主要代码3.1.1服务器监听指定的端口public void run() while(true) try Socket socket = this.serv
14、erSocket.accept(); InputStream is = socket.getInputStream(); OutputStream os = socket.getOutputStream(); byte buf = new byte5000; int length = is.read(buf); /客户端发来的连接信息(包括了用户名) String loginXML = new String(buf, 0, length); / 从客户端登录数据中提取出用户名信息(username) String username = XML.extractUsername(loginXML)
15、; String loginResult = null; / 判断用户是否登录成功 boolean isLogin = false; / 判断用户名是否重复 / 用户名重复 if(this.server.getMap().containsKey(username) loginResult = failure; / 用户名不重复 else loginResult = success; isLogin = true; String xml = XML.constructLoginResultXML(loginResult); os.write(xml.getBytes(); / 如果用户登录成功,
16、启动线程 if(isLogin) / 准备创建新的线程,用于处理用户的聊天数据,每一个连接上的用户都会对应一个该线程 ServerMessageThread serverMessageThread = new ServerMessageThread(server, socket); /将用户名及与之对应的线程对象 放到Map中 this.server.getMap().put(username, serverMessageThread); /更新用户列表(服务器端+客户端) serverMessageThread.updateUserList(); serverMessageThread.st
17、art(); catch(Exception ex) ex.printStackTrace(); 3.1.2向客房端发送信息public void sendMessage(String message) try os.write(message.getBytes(); catch(Exception ex) ex.printStackTrace(); 3.2客户端实现的主要代码3.2.1连接服务器public ClientConnection(Client client, String hostAddress, int port, String username) this.client =
18、client; this.hostAddress = hostAddress; this.port = port; this.username = username; /连接服务器 this.connect2Server(); / 连接服务器,由构造方法调用 private void connect2Server() try this.socket = new Socket(this.hostAddress, this.port); this.is = this.socket.getInputStream(); this.os = this.socket.getOutputStream();
19、catch(Exception ex) ex.printStackTrace(); 3.2.2向服务器发送数据public void sendMessage(String message, String type) try int t = Integer.parseInt(type); String xml = null; /客户端向服务器端发送聊天数据 if(CharacterUtil.CLIENT_MESSAGE = t)xml = XML.constructMessageXML(this.username, message,2); /客户端向服务器端发送关闭窗口的数据 else if(C
20、haracterUtil.CLOSE_CLIENT_WINDOW = t) xml = XML.constructCloseClientWindowXML(this.username); /向服务器端发送数据 this.os.write(xml.getBytes(); System.out.println(xml); catch(Exception ex) ex.printStackTrace(); 3.3测试运行界面3.3.1启动服务器界面3.3.2客户端登录界面3.3.3群聊界面3.3.4输入私聊对象界面3.3.5输入私聊信息界面3.3.6私聊对象收到信息界面第四章 相关知识4.1Sock
21、et 类Socket 类为网络通信提供了一套丰富的方法和属性。 Socket 类允许您使用 ProtocolType 枚举中所列出的任何一种协议执行异步和同步数据传输。Socket 类对异步方法遵循 .NET Framework 命名模式。 例如,同步的 Receive 方法对应于异步的 BeginReceive 和 EndReceive 方法。4.2 TCP协议TCP是面向连接的通信协议,通过三次握手建立连接,通讯完成时要拆除连接,由于TCP是面向连接的所以只能用于点对点的通讯。 TCP提供的是一种可靠的数据流服务,采用“带重传的肯定确认”技术来实现传输的可靠性。TCP还采用一种称为“滑动窗
22、口”的方式进行流量控制,所谓窗口实际表示接收能力,用以限制发送方的发送速度。4.3Server-Client模型的程序的开发原理服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。 客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。Socket接口是TCP/IP网
23、络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解Socket接口。Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。第五章 课程设计总结1.在这次课程设计中,我们基本完成任
24、务了,本次设计用到JAVA中图形界面设计,匿名内部类,XML,鼠标事件 等等 2.通过这次设计,我们发现做一个稍微大点的程序首先要设计好,我们首先就是因为设计问题,做完多人聊天的时候 ,发现很难做双人聊天了,因为我打算模仿QQ群,双击用户即可对其进行双人聊天,但是我在保存用户信息的时候添加的到MAP中的用户信息是String 类型而不是JLabel等等可以添加事件的数据类型,所以最后只要用输入用户名来进行多人聊天,为了让服务器进行判断所以不允许重名的用户,就是因为设计没考虑周全,拿了题目就开始写代码,以至于做到后面遇到困难。3. 做一个技术人员,现用现学很重要,对于客户端向服务器传送数据首先我们是用String进行传递,后来有高手告诉我们用XML好,清晰扩展性强,所以我们采用了XML用来保存和传递数据,对于XML 开始我们都没要接触过,后来通过看视屏,大致能使用XML进行简单的操作参考文献1 圣思园 张龙JAVA se 视频2 (美)埃克尔 著 陈昊鹏 译JAVA编程思想(机械工业出版社)3 萨维茨 著 朱剑平 、刘颖 译Java语言计算机科学与程序设计(清华大学出版社)4 王晓东著通信网络序设计(西安电子科技大学出版社)
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1