JAVA网络聊天室毕业论文解析.doc

上传人:小飞机 文档编号:4741414 上传时间:2023-05-12 格式:DOC 页数:36 大小:415.50KB
返回 下载 相关 举报
JAVA网络聊天室毕业论文解析.doc_第1页
第1页 / 共36页
JAVA网络聊天室毕业论文解析.doc_第2页
第2页 / 共36页
JAVA网络聊天室毕业论文解析.doc_第3页
第3页 / 共36页
JAVA网络聊天室毕业论文解析.doc_第4页
第4页 / 共36页
JAVA网络聊天室毕业论文解析.doc_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《JAVA网络聊天室毕业论文解析.doc》由会员分享,可在线阅读,更多相关《JAVA网络聊天室毕业论文解析.doc(36页珍藏版)》请在三一办公上搜索。

1、软件工程课程设计报告项目题目:网 络 聊 天 室 专业班级:项目组成员:指导教师:开始日期:完成日期: 课程设计题目说明书(注:以下各部分根据实际情况选择填写) 课程设计题目:网络聊天室 技术参数和设计要求:已知技术参数:JAVA、CS结构、Socket类建立套接字实现客服端和服务端得通讯、通讯协议(TCP、UDP) 设计要求:1、服务器1)实现GUI界面,可选择端口运行或关闭服务器,可设置最大连接数。2)在GUI记录运行日志,同时日志被保存在log文件中。3)显示在线用户,可以强制任意用户下线。4)可发送系统消息给所有在线用户。2、客户端1)可使用一个用户名登录服务器,登录之后进入聊天室界面

2、。2)显示在线用户列表,接收其他用户及系统发送的消息。3)可选择某个在线用户单独聊天。工作量:(根据项目实际情况选择,在所作的工作后打) 具体工作量分为几个部分:1 可行性研究分析和可行性研究报告的撰写工作。 2 项目开发计划和开发准备工作,包括小组的分工等; 3 软件需求的调查和软件需求说明书的撰写; 4 软件的概要设计和概要设计说明书的撰写; 5 软件的详细设计和详细设计说明书的撰写; 6 软件的实现工作,包括代码的实现和实现过程中的具体要求工作; 7 测试的准备工作和测试计划报告的撰写; 8 整个软件试运行、软件测试、测试报告的撰写和用户手册的撰写工作;9 项目文档和代码的规范化整合;1

3、0整个项目的总结和课程设计总结报告的撰写。 工作计划安排:第一天:需求分析及初步设计阶段(决定每个功能所需的类型及数据类型)第二天:根据相应功能设计出各类所用到的方法及数据类型第三天第五天:具体实现各个类中的各个方法第六天:对各个界面和服务器进行调整及测试完善工作。同组设计者及分工:组长: 需求分析:负责人:参加人员: 概要设计:负责人: 参加人员: 详细设计:负责人: 参加人员: 编码实现:负责人:参加人员: 测试和维护:负责人: 参加人员: 目录第一部分 需求说明书- 11.1 开发背景 - 11.2 设计要求 - 11.3 设计目的 - 11.4 项目功能特点 - 11.5 功能实现 -

4、 2第二部分 概要设计说明书 - 31引言 - 3 1.1编写目的 - 32总体设计 - 32.1需求规定 - 32.2运行环境 - 32.3基本设计概念和处理流程 - - 32.4总体结构 - 42.5功能分配 - 43接口设计 - 53.1用户接口 - 54运行设计 - 64.1运行模块的组合 - 64.2运行控制 - 65出错处理设计 - 66设计原理 - 66.1通信方式 - 66.2核心算法 - 67设计模型 - 78相关控件的介绍 - 7第三部分 详细说明书 - 91程序系统结构 - 92 客户端模块设计说明 - 92.1程序描述 - 92.2功能 - 92.3设计方法 - 93服

5、务器模块设计说明 - 113.1程序描述 - 113.2功能 - 113.3设计方法 -4 主要代码 - 135客户端 - 18 5.1主要实现 - 185.2主要代码 - 196处理通信的主要实现 - 22第四部分 测试分析报告- 251 服务器端 - 252 客户端 - 28第五部分 课程设计总结报告 - 31后记(致谢) - 32需求说明书11开发背景在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ,网络聊天时一类的聊天系统的发展日新月异,因此产生了制作一个类似QQ的网络聊天工具的;而且通过制作该程序还能更好的学习网络软件编程知识

6、。网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,

7、监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。12 设计要求本课程设计的目标是利用套接字socket()设计一个聊天程序,该程序基于C/S模式,客户机器向服务器发聊天请求,服务器应答并能显示客户机发过来的信息。13 设计目的设计一个网络聊天程序程序,并根据这个程序,说明TCP连接的建立、套接字socket的使用以及端口等问题,从而对TCP层的工作原理有更好的理解和认识。14 项目功能特点1、基本功能:实现服务器监听,客户端连接,可进行多人会话的C/S聊天室。2、服务器特点1)实现GUI界面,可选择端口运行或关闭服务器,可

8、设置最大连接数。2)在GUI记录运行日志,同时日志被保存在log文件中。3)显示在线用户,可以强制任意用户下线。4)可发送系统消息给所有在线用户。3、客户端特点1)可使用一个用户名登录服务器,登录之后进入聊天室界面。2)显示在线用户列表,接收其他用户及系统发送的消息。3)可选择某个在线用户单独聊天。1.5 功能实现1.登录验证功能.2. 客户通过服务器转发,实现聊天功能.3. 实时显示目前其它用户的状态.4. 保存并能察看聊天纪录.5.申请新的用户号码.6. 易用,美观的图形界面,实现系统托盘. 7.实现私聊和公聊功能。概要设计说明书1引言1.1编写目的即将开始“网络聊天室”的开发,为了更好地

9、计划、指导、规范开发过程,特制定网络聊天室概要设计说明书。2总体设计2.1需求规定网络聊天室的总体目标是为网络用户提供一个方便易用的即时通讯工具。需要实现以下一些基本功能:A 消息发送:用户可以发送消息给聊天室里所有的或者指定的其他用户。B 消息接受:用户可以接收到其他用户发送给他的消息。C 聊天室管理功能:聊天室管理员可以启动或者关闭聊天室服务,并且对于违反聊天室规则的用户可以强制其离开聊天室。2.2运行环境Windows2000 windows xp环境下2.3基本设计概念和处理流程本系统运行用JAVA开发,采用CS结构,系统分为客服端和服务端两大模块,使用Socket类建立套接字实现客服

10、端和服务端得通讯。系统主体的处理流程:客服端服务端发送请求返回应答2.4总体结构网络聊天室服务端客服端2.5功能分配客服端和服务器模块功能树图客服端:客服端发送消息显示在线用户接收并显示消息服务端:服务端转发用户消息处理用户登录申请服务器管理3接口设计3.1用户接口提供一个用户操作界面:包括用户可以再界面中登录聊天室、输入消息、浏览聊天内容和聊天对象。3.2内部接口Socket(string hont ,int port );客户端使用Socket类建立与服务器的套接字连接。ServerSocket(int port);建立接收客户的套接字的服务器套接字。4运行设计4.1运行模块的组合具体软件

11、的运行模块组合为客户端窗口的运行环境,服务器无窗口环境,服务器与客户端在运行过程中传输字符,交换信息,处理数据。4.2运行控制软件运行有较友好的界面,能实现用户会话交互的要求。5出错处理设计5.1出错输出信息错误原因处理方法在用户没有输入昵称系统给出提示:“请输入昵称!”用户输入的昵称与已登录用户同名系统给出提示:“改名已经被使用!”发送空语句系统给出提示:“不能发送空语句!”服务器建立失败捕获异常,输出异常原因6 设计原理6.1通信方式1)服务器建立一个TCP监听端口,等待客户端连接。 2) 客户连接服务器,服务器生成一个Socket服务该用户,发送在线用户列表。3)服务器接收来自客户端的聊

12、天信息,然后遍历转发给所有在线用户。 4)客户端之间使用UDP通信模式进行单独聊天,不必经过服务器。6.2核心算法:1)建立一个Information类用于表示通信中传递的信息对象,Information有三个字段,分别代表信息类型,信息来源,信息内容。2)建立两个扩展自Thread的类 Sendert和Receiver分别用于一个Socket的接收和发送信息,他们都使用可阻塞线程的队列Queue作为接口传递信息。3) 使用Model-UI模式构建服务器和客户端程序。服务器Model:有两个线程,一个等待用户连接,一个用于转发数据。首先构造一个ServerSocket,在第一个线程中用acce

13、pt()方法等待连接。连接一个用户后取得Socket,然后建立该Socket的Sender和Receiver对象。每个Sender都有一个单独的Queue,这个queue和Socket以键值对保存在一个socket_queue_map中,以后可以遍历。所有的Receiver使用同一个receiver_queue。在第二个线程中,用receiver_queue.tack()等待Receiver接收的信息,然后遍历socket_queue_map,转发给每一个socket。客户端Model:连接服务器后获得一个Socket,分别建立Sender和Receiver线程并运行。然后利用sender_q

14、ueue发送消息,利用receiver_queue接收消息。4)分别建立Server和Client的GUI,再进行细节优化,增设其他功能7设计模型8相关控件的介绍1、Winsock控件的用途 创建收集用户信息的客户端应用程序,并将收集的信息发送到某中央服务器。创建一个服务器应用程序,作为多个用户的数据的汇入点。创建“聊天”应用程序。2、选择通讯协议的标准两类传输协议:TCP;UDPTCP是Tranfer Control Protocol的简称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须建立连接,以便在

15、TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时,另一个socket可以要求进行连接,一旦这两个socket连接起来,它们就可以进行双向数据传输,双方都可以进行发送或接收操作。UDP是User Datagram Protocol的简称,是一种无连接的协议,每个数据报都是一个独立的信息,包括完整的源地址或目的地址,它在网络上以任何可能的路径传往目的地,因此能否到达目的地,到达目的地的时间以及内容的正确性都是不能被保证的。 这两种协议做简单比较:使用UDP时,每个数据报中都给出了完整的地址信息,因此无需要建立发送方和接收方的连接。对于TCP协议,由

16、于它是一个面向连接的协议,在socket之间进行数据传输之前必然要建立连接,所以在TCP中多了一个连接建立的时间。使用UDP传输数据时是有大小限制的,每个被传输的数据报必须限定在64KB之内。而TCP没有这方面的限制,一旦连接建立起来,双方的socket就可以按统一的格式传输大量的数据。UDP是一个不可靠的协议,发送方所发送的数据报并不一定以相同的次序到达接收方。而TCP是一个可靠的协议,它确保接收方完全正确地获取发送方所发送的全部数据。详细设计说明书1程序系统结构网络聊天室服务端客服端2 客户端模块设计说明2.1程序描述客户端模块为用户提供聊天室操作界面,用户通过客户端可以发送消息给全部或指

17、定的用户,可以看到聊天内容,可以看到聊天室内有哪些用户在线。2.2功能输入:用户操作处理A 登录聊天室服务器。B 根据聊天要求构造请求消息,并向服务器发送。C 解析服务器的应答消息,并进行相应处理。输出:提示消息、聊天内容的聊天对象2.3设计方法2.3.1登录聊天室服务器输入:无A 等待用户输入用户昵称和性别。B 判断输入合法性。C 通过Socket连接向服务器发送请求消息,格式为:“PEOPLE”+用户昵称+“【性别】”。D 等待服务器应答。输出:登录请求消息232接收服务器应答消息,并进行处理输入:应答消息处理:A 获取服务器应答消息。B 解析应答消息。C 根据应答消息类型进行处理,应答消

18、息分为:“PEOPLE”+用户昵称+“【性别】”;登录请求通过,用户登录。“MSG”+用户昵称+“【性别】”+“说:”,聊天室其他客户的聊天消息。“QUIT”+this.name:退出聊天室。“悄悄地对:”+消息:私密聊天。“newlist”+用户昵称+“【性别】”:刷新聊天者列表输出:无2.3.3向聊天室服务器发送聊天内容转发请求输入:聊天内容处理:A 检查发送消息内容是否为空。B 向聊天室服务器发送广播请求,格式为:“MSG”+用户昵称+“【性别】”+“说:”+消息。C 如果用户选择私聊,根据用户选择的聊天对象向服务器发送私聊请求,进入私聊对话框,格式为:“悄悄地对”+私聊对象+“说”+消

19、息+“(我是”+用户昵称+“)”输出:聊天内容转发请求2.3.4离开聊天室输入:离开请求处理:向服务器发送离开请求,格式为:“QUIT”输出:无3.4流程逻辑3服务器模块设计说明 3.1程序描述接收并处理客户端的登录请求,并根据客户端的聊天请求向指定客户端转发聊天内容,同时提供聊天室用户管理和服务管理功能,该模块无界面。3.2功能输入:客户端请求消息处理:A 启动服务器服务。B 等待接收客户端请求。C 根据客户端请求类型,做不同处理。D 将出来结果发送给客户端。输出:发给客户端的应答消息。3.3设计方法3.31启动服务器的聊天服务输入:无处理:A 设置服务器服务的Socket 端口号B 启动服

20、务器服务进程。输出:无3.3.2接收并处理客服端请求输入:无处理:A 获取客户端发送的请求消息。B 解析请求消息。C 根据前期消息类型做不同的应答处理。请求消息类型分为:“PEOPLE”+用户昵称+“【性别】”:新用户登录请求。“MSG”+用户昵称+“【性别】”+”说:”:转发聊天室信息。“QUIT”+this.name:退出聊天室。“悄悄地对”+私聊对象+“说”+消息+“(我是”+用户昵称+“)”:向私聊对象转发聊天消息。“newlist”:刷新聊天者列表输出:无3.3.3处理用户离开情况输入:无处理:A 在用户列表中删除离开用户。B 重新构造在线用户名单。C 向所有在线用户广播用户离开指令

21、和在线用户名单。输出:无3.3.4将管理员指定用户从聊天室中踢开输入:无处理:A 判断用户聊天消息是否健康合法。B 如果不合法,向其他聊天者发送该用户被强制退出的消息。输出:向其他聊天者发送该用户被强制退出的消息。4 主要代码 param port 监听端口 public void startOn(int port)throws IOException this.port=port; server=new ServerSocket(port); logger.info(启动服务器端口:+port); running=true; new Thread(this).start(); transac

22、t(); /* *关闭服务器监听 */ public void stop()throws IOException server.close(); running=false; /* *返回服务器当前状态 * return 如果正在监听返回true */ public boolean isRunning() return running; /* *取得连接用户数量 */ public int getConnectNumber() return socketList.size(); /* *设置最大连接数量 */ public void setMostConnect(int mostConnect

23、) this.mostConnect=mostConnect; /* *取得一个关于用户列表的数据模型 *return JTable的数据模型,实作ABstractTableModel抽象类 */ public AbstractTableModel getUserTableModel() if(userTableModel=null) userTableModel=new AbstractTableModel() protected String columnNames=用户名,ip,端口,登录时间; public int getRowCount()return socketList.size

24、(); public int getColumnCount() return columnNames.length; public String getColumnName(int column) return columnNamescolumn; public Object getValueAt(int row,int column) switch(column) case 0:return socket_name_map.get(socketList.get(row); case 1: return socketList.get(row).getInetAddress(); case 2:

25、 return socketList.get(row).getPort(); case 3:return socket_date_map.get(socketList.get(row); default: return null; public boolean isCellEditable(int row,int column) return false; ; return userTableModel; /* *断开索引指向的在线用户连接 * param index 用户索引,具体点就是SocketList的索引,是按 *连接时间排序的 */ public void removeUser(i

26、nt index)throws IOException Socket socket=socketList.get(index); socket.close(); /* *发送服务器系统消息 *这个接口可用来实现服务器对所有再线用户发送一条消息 * param info 消息对象 */ public void sendMessage(Information info) try queue.put(info); logger.info(info.content.toString(); catch(InterruptedException e) logger.warning(e.getMessage

27、(); /* * Method run * 程序主线程,服务器等待连接 * 取得一个用户连接的Socket之后,先验证用户信息后加入用户列表, * 然后运行该Socket的Sender和Receiver线程。 */ public void run() while(!server.isClosed() try Socket socket=server.accept(); if(socket_queue_map.size()=mostConnect) socket.close(); else if(testName(socket) logger.info(socket_name_map.get(s

28、ocket)+ socket.getRemoteSocketAddress()+t已连接.); sendNames(socket); new Sender(socket,socket_queue_map.get(socket).start(); new Receiver(socket,queue).start(); catch(IOException e) logger.warning(e.getMessage(); ; /* *验证用户名。 *当通过套接字传送过来的登录用户名与正在使用中的用户名有重复 *或者是系统规定的非法用户名(注:这个是程序设计时,自己定义的, *主要是为了预留特定的字

29、符串或字符以便特殊之用)时,返回false. *同时将验证结果通过套接字反馈给登录用户。 *在这个过程中,还做了一些其他的处理,比如将验证通过的用户加入 *用户列表。 */ private boolean testName(Socket socket) throws IOException DataOutputStream dos=new DataOutputStream(socket.getOutputStream(); DataInputStream dis=new DataInputStream(socket.getInputStream(); String name=dis.readUTF(); Collection names=socket_name_map.values(); boolean valid=Setting.isValidName(name)&!names.contains(name); dos.writeBoolean(valid); if(valid) Information inf

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号