聊天室课程设计.docx
《聊天室课程设计.docx》由会员分享,可在线阅读,更多相关《聊天室课程设计.docx(35页珍藏版)》请在冰豆网上搜索。
聊天室课程设计
计算机网络
课程设计
题目:
聊天程序的设计和实现
学院:
计算机
年级:
2009级
班级:
网络工程1班
指导老师:
宋伟
小组成员:
20095544张驹强
20095545张源
20095547朱俊逸
时间:
2011年1月10日
课程设计指导教师评定成绩表(学生姓名:
张驹强学号:
20095544)
项目
分值
优秀
(100>x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格(x<60)
评分
参考标准
参考标准
参考标准
参考标准
参考标准
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
技术水平与实际能力
25
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
年月日
课程设计指导教师评定成绩表(学生姓名:
张源学号:
20095545)
项目
分值
优秀
(100>x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格(x<60)
评分
参考标准
参考标准
参考标准
参考标准
参考标准
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
技术水平与实际能力
25
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
年月日
课程设计指导教师评定成绩表(学生姓名:
朱俊逸学号:
20095547)
项目
分值
优秀
(100>x≥90)
良好
(90>x≥80)
中等
(80>x≥70)
及格
(70>x≥60)
不及格(x<60)
评分
参考标准
参考标准
参考标准
参考标准
参考标准
学习态度
15
学习态度认真,科学作风严谨,严格保证设计时间并按任务书中规定的进度开展各项工作
学习态度比较认真,科学作风良好,能按期圆满完成任务书规定的任务
学习态度尚好,遵守组织纪律,基本保证设计时间,按期完成各项工作
学习态度尚可,能遵守组织纪律,能按期完成任务
学习马虎,纪律涣散,工作作风不严谨,不能保证设计时间和进度
技术水平与实际能力
25
设计合理、理论分析与计算正确,实验数据准确,有很强的实际动手能力、经济分析能力和计算机应用能力,文献查阅能力强、引用合理、调查调研非常合理、可信
设计合理、理论分析与计算正确,实验数据比较准确,有较强的实际动手能力、经济分析能力和计算机应用能力,文献引用、调查调研比较合理、可信
设计合理,理论分析与计算基本正确,实验数据比较准确,有一定的实际动手能力,主要文献引用、调查调研比较可信
设计基本合理,理论分析与计算无大错,实验数据无大错
设计不合理,理论分析与计算有原则错误,实验数据不可靠,实际动手能力差,文献引用、调查调研有较大的问题
创新
10
有重大改进或独特见解,有一定实用价值
有较大改进或新颖的见解,实用性尚可
有一定改进或新的见解
有一定见解
观念陈旧
论文(计算书、图纸)撰写质量
50
结构严谨,逻辑性强,层次清晰,语言准确,文字流畅,完全符合规范化要求,书写工整或用计算机打印成文;图纸非常工整、清晰
结构合理,符合逻辑,文章层次分明,语言准确,文字流畅,符合规范化要求,书写工整或用计算机打印成文;图纸工整、清晰
结构合理,层次较为分明,文理通顺,基本达到规范化要求,书写比较工整;图纸比较工整、清晰
结构基本合理,逻辑基本清楚,文字尚通顺,勉强达到规范化要求;图纸比较工整
内容空泛,结构混乱,文字表达不清,错别字较多,达不到规范化要求;图纸不工整或不清晰
指导教师评定成绩:
指导教师签名:
年月日
重庆大学本科学生课程设计任务书
课程设计题目
计算机网络课程设计
学院
计算机学院
专业
网络工程
年级
2009
已知参数和设计要求:
通过计算机网络的课程设计,使学生了解、掌握TCP、UDP协议的原理;了解、掌握利用WinsockAPI编程的方法;了解、掌握应用协议设计的思想;利用WinsockAPI编制一个能部署在Internet上的点对点数据交换(P2P)、HTTP/FTP服务器系统、共享白板。
要求每组学生(3人/组)从上述3个系统中任选一个,独立完成系统的功能设计和实现,使所实现的系统可以能够包含主要的内容要求,并要求学生必须在报告中明确具体分工情况。
学生应完成的工作:
分组3人/组。
内容:
协议编程。
语言:
JAVA/C++。
3个题目任意选一个
1)点对点数据交换(P2P):
实现基于服务器转发的任意多点间的数据共享与交换。
2)HTTP/FTP服务器系统:
HTTP/FTP客户端系统和HTTP/FTP服务端系统。
3)共享白板:
实现基于服务器转发的多点间的文字,简单图案等信息的远程实时共享。
目前资料收集情况(含指定参考资料):
1)《计算机网络》第4版谢希仁电子工业出版社2003年.6月
2)用TCP/IP进行网络互联(第一卷) D.E.Comer电子工业出版社2004年.11月第四版
3)TCP/IP网络原理与技术周明天、汪文勇:
清华大学出版社:
1993
4)JAVA网络高级编程殷兆麟清华大学出版社2005.5
5)VisualC++网络高级编程,陈坚,人民邮电出版社,2001年08月
课程设计的工作计划:
1.需求分析(说明系统目的,要求,操作流程,开发工具与开发平台)
2.总体设计(描述系统功能,系统架构,模块化分)
3.详细设计(建立系统的数据结构,协议结构,数据流程图)
4.系统实现编码(用所选开发工具完成应用系统)
任务下达日期2012年1月5日
完成日期2012年1月11日
指导教师(签名)
学生(签名)
说明:
1、学院、专业、年级均填全称,如:
光电工程学院、测控技术、2003。
2、本表除签名外均可采用计算机打印。
本表不够,可另附页,但应在页脚添加页码。
目录
摘要2
一需求分析3
1.1开发背景3
1.2功能要求3
1.3主要涉及的编程知识3
1.4编程语言及环境3
二总体设计4
2.1系统实现的基本原理4
2.2系统功能5
2.2.1服务器端的主要功能5
2.2.2客户端的主要功能5
2.3系统运行数据流程图6
2.4功能模块7
2.4.1服务器功能模块流程图7
2.4.2客户端功能模块流程图8
三详细设计9
3.1系统体系协议设计9
3.2聊天室服务器端设计10
3.2.1ChatServer类10
3.2.2ClientProc类11
3.3聊天室客户端设计13
3.3.1ChatFrame类13
3.3.2Connect类16
3.3.3Plist类16
3.3.4PopupListener类16
3.3.5Acceptfilethread&Sendfilethread类16
四系统实现与调试分析18
4.1聊天室服务器运行效果18
4.2聊天室客户端用例运行效果19
4.3结果分析与问题解决21
五总结22
参考文献23
摘要
随着 “E时代”的到来,网络观念深入人心。
网络聊天室是在一个网站中,供许多人通过文字与符号进行实时(您输入的内容马上就能被别人看见)交谈、聊天的场所,它是一个向整个因特网开放的地方。
为了加深理解和应用网络编程,实现网络聊天的功能,本次课程设计采用WindowsSocket编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,实行将所有信息发往服务器端,再由服务器进行分别处理的思路,服务器端是所有信息的中心。
本聊天室程序设计基于C/S模式,聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听客户端发来的消息,客户端需登陆到服务器才可以实现正常的聊天功能。
而聊天系统是一个开放的基于Java的应用开发设计,其主要特点是动态的,实时的来完成信息的传递,并拥有大量的客户请求的高效互动,更有效地处理。
本文围绕Java编程语言在网络编程方面的具体应用,论述了使用面向对象方法,对程序进行如下探讨:
1.需求分析2.总体设计3.详细设计
最后使用Java编程实现的全过程。
在编程我们使用的java语言,是目前比较流行的编程语言。
Java语言最大的特点是具有跨平台性,使其不受平台不同的影响,得到了广泛的应用。
本次课程设计的详细分工如下:
20095544张驹强,完成本次实验服务器设计与聊天室信息传输控制协议的设计等过程,并参与文档与测试工作,占总工作量的33.3%;
20095545张源,完成本次系统功能流程设计与文件收发功能的设计等过程,并参与文档与测试工作,占总工作量的33.3%;
20095547朱俊逸,完成本次实验聊天室数据结构设计等过程,并参与文档与测试工作,占总工作量的33.3%。
关键词:
聊天室,JAVA,WindowsSocket
一需求分析
1.1开发背景
在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的聊天工具越来越多,类似QQ、网络聊天一类的聊天系统的发展日新月异。
因此,我门设计了这个网络聊天工具的,而且通过制作该程序还能更好的学习网络软件编程知识。
本系统所要实现的主要功能是为广大用户提供一个借助网络进行人际交往的平台。
因为服务器端采用多线程,所以性能有很大提升。
因为服务端和客户端之间采用TCP协议进行网络通信,建立的是可靠的、端到端的网络连接,所以可靠性和安全性都很好。
1.2功能要求
(1)服务器功能,用于监听与发送广播信息;
(2)客户登录功能;
(3)客户可以一对一和多对多聊天功能;
(4)客户端程序可以实时显示其它在线的用户;
(5)客户之间可以点对点传输文件。
1.3主要涉及的编程知识
基于TCP的Socket通信编程、GUI程序设计、事件处理、多线程技术、输入输出处理、异常处理等。
1.4编程语言及环境
在编程中我们使用的是目前比较流行的编程语言------java语言。
开发环境选择了IBM公司研发的EclipseSDK3.7.0版本。
二总体设计
为实现网络聊天的功能,本次课程设计采用WinsockAPI编程,服务器与客户端采用了TCP/IP连接方式,同时,聊天室共分为服务器端和客户端两部分,服务器端程序主要负责侦听与转发客户端发来的消息,客户端需登陆到服务器才可以实现正常的聊天功能。
2.1系统实现的基本原理
本系统在MicrosoftWindows下通过TCP协议建立网络应用程序,需要使用Socket套接口编程技术。
所谓socket通常也称作"套接字",应用程序通常通过"套接字"向网络发出请求或者应答网络请求。
以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。
ServerSocket用于服务器端,Socket是建立网络连接时使用的。
在连接成功时,应用程序两端都会产生一个Socket实例,操作这个实例,完成所需的会话。
对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。
不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
根据连接启动的方式以及本地套接字要连接的目标,套接字之间的连接过程可以分为三个步骤:
服务器监听,客户端请求,连接确认。
服务器监听:
是服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
客户端请求:
是指由客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。
为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
连接确认:
是指当服务器端套接字监听到或者说接收到客户端套接字的连接请求,它就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,连接就建立好了。
而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
开发原理:
服务器,使用ServerSocket监听指定的端口,端口可以随意指定(由于1024以下的端口通常属于保留端口,在一些操作系统中不可以随意使用,所以建议使用大于1024的端口),等待客户连接请求,客户连接后,会话产生;在完成会话后,关闭连接。
客户端,使用Socket对网络上某一个服务器的某一个端口发出连接请求,一旦连接成功,打开会话;会话完成后,关闭Socket。
客户端不需要指定打开的端口,通常临时的、动态的分配一个1024以上的端口。
Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。
要学Internet上的TCP/IP网络编程,必须理解Socket接口。
Socket接口设计者最先是将接口放在Unix操作系统里面的。
如果了解Unix系统的输入和输出的话,就很容易了解Socket了。
网络的Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。
Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。
2.2系统功能
2.2.1服务器端的主要功能
1.启动后进行监听,等待客户端连接;
2.显示系统各种工作的信息,如用户上线和用户信息交流等信息;
3.显示在线用户信息;
4.向已经连接到服务端的用户发送广播消息和系统信息;
5.退出时,断开所有的用户连接。
2.2.2客户端的主要功能
1.登录功能,连接到已经开启的服务器并可以随时登录和注销;
2.用户可以配置要连接服务器端的IP地址和端口号;
3.用户可以设置自己的用户名与性别;
4.用户可以向所有人或者个人发送群消息或私聊消息;
5.用户可以点对点发送和接受文件。
2.3系统运行数据流程图
图2-1
2.4功能模块
2.4.1服务器功能模块流程图
图2-2
2.4.2客户端功能模块流程图
图2-3
三详细设计
功能
传输方向
控制信息
用户登录
用户服务器
name&sex
反馈重名信息
服务器用户
samename
反馈不重名信息
服务器用户
nosamename
用户注销
用户
服务器
quit
用户登录提示
服务器
ALL
new&name&sex
刷新下拉菜单列表
服务器
ALL
resetselect&name&name2
刷新在线用户列表
服务器
ALL
resetplist&name.[sex]&...
3.1系统体系协议设计
取消发送文件
源服务器
cancelsendfile+&+目标name
服务器目标
cancelsendfile+&+源name
发送文件
源服务器
sendfile&目标name&路径+源IP+&+源端口+大小
服务器目标
sendfile&源name+&路径&源IP&端口+&大小
接受文件
目标服务器
acceptfile&源目标
服务器源
acceptfile&目标
拒绝接受文件
目标
服务器
refusefile+&+源name
服务器源
refusefile+&+目标name
群聊
源服务器
内容
服务器ALL
源name+:
+内容
公开私聊
源服务器
”whitwho”+&+privateFalse+&+目标name+&+内容
服务器ALL
“whitwho”+&+源name+&+目标name+&+内容
私聊
源服务器
“whitwho”+&+privateTrue+&+目标name+&+内容
服务器目标
“privateTalk”+&+源name+&+目标name+&+内容
3.2聊天室服务器端设计
服务器包server主要包含两个类,分为ChatServer和ClientProc
3.2.1ChatServer类
该类包含了服务器的主要功能的实现:
建立服务器连接,实现服务端用户登录、
退出与监听,实现服务器端的消息收发,在线用户列表实现等主要功能。
它的主要结构如下所示:
图3-1
3.2.2ClientProc类
该类的功能是为某个用户服务的建立一个用户线程。
主要的实现代码如下:
privatevoidupdateList(Stringname,Stringsex){
System.out.println("intwoupdatelist");
ss.cl.remove(name);
ss.resetcl();
Ss.resetplist();
}
publicvoidrun(){
while(name==null){
try{
Stringinmsg;
inmsg=in.readLine();
System.out.println(inmsg);
String[]userInfo;
userInfo=inmsg.split("&");
name=userInfo[0];
sex=userInfo[1];
ss.addConnection(s,this);
if(ss.cl.contains(userInfo[0])){//判断是否重名
System.out.println("有重名错误");
ss.sendERRO(name,"samename");
ss.deleteConnection(s,this,1);
s.close();
return;
}else{
ss.sendOne(name,"nosamename");
System.out.println("没有重名错误!
!
!
!
!
!
!
!
!
");
System.out.println("已将此用户记录");
ss.sendAll("new&"+inmsg);//发送信息更新用户列表new&name&sex
System.out.println("已向所有用户发送"+name);
ss.cl.add(name);
System.out.println("用户列表:
"+ss.cl);
ss.resetcl();
ss.resetplist();
Datet=newDate();
ss.jTextArea1.append(t.toString()+":
"
+s.getInetAddress()+""+s.getPort()+""
+name+"登入"+"\n");
ss.flashlist();
System.out.println("flashlisthasrun");
}
}catch(IOE