基于socket的网络聊天室.docx
《基于socket的网络聊天室.docx》由会员分享,可在线阅读,更多相关《基于socket的网络聊天室.docx(10页珍藏版)》请在冰豆网上搜索。
基于socket的网络聊天室
《JAVA程序设计》课程设计报告
院系
题目基于socket的Client/Server监听模式
学生姓名
学生学号
专业班级
指导教师
完成时间
(空2行)
1需求分析…………………………………………………………………1
2系统设计……………………………………………………………………Y
2.1界面模块设计…………………………………………………………Y
2.2用户客户端登录验证设计……………………………………………Y
2.3服务器模块设计…………………………………………………………Y
2.4客户端模块设计…………………………………………………………Y
2.5数据传输加密设计…………………………………………………………Y
3实现……………………………………………………………………Y
3.1界面模块实现…………………………………………………………Y
3.2用户客户端登录验证实现……………………………………………Y
3.3服务器模块实现…………………………………………………………Y
3.4客户端模块实现…………………………………………………………Y
3.5数据传输加密实现…………………………………………………………Y
X×××××(正文第X章)…………………………………………………Y
结论………………………………………………………………………………Y
参考文献…………………………………………………………………………Y
附录A源代码(必须)………………………………………………………Y
正文部分:
1需求分析
现在网络通信应用的很广泛,几乎所有应用都基于网络实现通信。
而要实现异地的网络通信,尤其是C/S结构的软件,使用套接字的网络编程是实现双方通信的基础。
本课程设计就是基于JavaTCP客户端和服务器、UDP组播实现的群聊。
1.1基本功能需求
以下三点是本课程设计的基础功能实现,即要完成基本的客户端-服务器的连接通信。
性能及其他创新点可以自行实现。
1.1.1有客户端和服务器,服务器负责客户端之间的通信(采用C/S模式,即Client/Server监听模式)。
1.1.2客户端A对文件进行加密,经过服务器,把密文发送给客户端B(具体加密算法,方式自定)。
1.1.3客户端B接收来自客户端A的密文,对客户端A传送过来的文件解密,还原成明文。
1.2扩展功能需求
以下是本课程设计的扩展功能实现,即在完成基本功能需求的基础上,可以尝试完成以下功能。
1.2.1提供客户端用户注册功能。
用户使用客户端前,需要先进行注册,才能登录使用。
用户的注册信息(登录帐号和密码)使用MySQL数据库进行持久化存储。
1.2.2客户端A可以将加密数据,经过服务器,传输到多个客户端。
此处要求使用UDP协议。
基于UDP的特性,可以选择适当的广播通信方式,此处最好使用UDP组播,即凡是加入到“同一个多播组”中的用户,均可以接收到数据,实现数据的高效传输。
1.3性能优化需求
以下则是对性能方面的改进,使得整体具有更好的性能。
简而言之,就是在不影响系统运行正确性的前提下,使之运行地更快,完成特定功能所需的时间更短。
1.3.1用客户端和服务器实现TCP通信时,服务器负责客户端之间的通信,服务器套接字在始终监听这端口,等待客户端的连接,一旦有客户端来连接,为该客户端启动一个线程,去单独处理这个客户端的通信聊天,服务器不堵塞,可以继续接收其他用户的连接;单独创建线程会延迟较大,可以引入线程池,创建一个可根据需要创建新线程的线程池,但是在以前构造的线程可用时将重用它们。
对于执行很多短期异步任务的程序而言,这些线程池通常可提高程序性能,从而优化性能速度。
1.3.2因为本课程设计是使用图形用户界面的基于socket的Client/Server监听模式,实现网络通信。
对客户端而言,不仅要构造(初始化)用户界面,还要初始化网络模块,创建客户端套接字,实现对单一服务器(固定IP地址)的连接,在整体响应效果上,会有“延迟”和“卡顿”,可以采用多线程技术,将加载耗时,初始化不安全的模块移除主线程,使得响应速度更快。
2系统设计(作为正文第2章标题,用小3号黑体,加粗,并留出上下间距为:
段前0.5行,段后0.5行)
软件的整体设计,以需求规格说明书为输入,以产生满足功能需求和非功能需求的设计方案为输出。
本课程设计则是采用基于socket的Client/Server监听模式。
首先必须满足用户功能需求,软件系统能够在用户给定的环境下有效运行,设计出具有可行性、易维护的软件系统。
客户端/服务器范型把软件分为两类--客户端程序和服务器程序。
客户端软件启动一个连接并发送请求,而服务器软件监听连接并处理请求。
在UDP编程环境中,没有建立实际的连接,并且UDP应用程序可以在相同的套接字上建立并接收请求。
在TCP环境中,两台计算机之间建立了连接,客户端/服务器范型是相对应的。
系统整体结构图如下:
系统整体结构图
2.1界面模块设计
界面是用户与软件系统之间传递和交换信息的媒介和窗口;对软件的人机交互、操作逻辑、界面美观的整体设计,不仅是让软件变得有个性有品味,还可以让软件的操作变得舒适、简单、自由,充分体现软件的定位和特点,使软件系统更人性化,更灵活。
本例中采用模仿QQ登录的界面,服务器和客户端都采用一样的,不同的是,客户端登录界面通过一个“用户注册”接口。
采用JFrame去边框化。
如下图:
2.2用户客户端登录验证
登录验证模块,则需要连接数据库,验证当前登录用户是否已注册;对已注册的用户进行用户密码匹配验证;对未注册的用户,要提示用户进行注册帐号。
登录验证模块,则需要一个Java类DbUtil,负责处理,里面定义关于数据库操作,取用户表中的记录进行匹配查询。
2.3服务器模块设计
服务器模块,是本课程设计实现socket的Client/Server监听模式的非常重要的一步。
因为使用TCP套接字编程可以实现基于TCP/IP协议的面向连接的通信,它分为服务器端和客户端两部分,而服务器负责客户端之间的通信。
服务器端程序调用ServerSocket类中的accept()方法等待客户端的连接请求,一旦accept()接收了客户端连接请求,该方法返回一个与该客户端建立了专线连接的Socket对象,不用程序去创建这个Socket对象。
建立了连接的两个Socket是以IO流的方式进行数据交换的,Java提供了Socket类中的getInputStream()返回Socket的输入流对象,getOutputStream()返回Socket的输出流对象。
服务器设计要点:
1、TCP服务器程序要想接收多个客户端连接需要循环调用 ServerSocket.accept()方法。
2、服务器程序与每个客户端连接的会话过程不能互相影响,需要在独立的线程中运行,因此需要设计一个线程类。
3、一个线程服务对象与一个服务器端Socket对象相关联,共同来完成与一个客户端的会话。
用一个线程,单独地处理一个用户客户端的聊天数据的传输,各个用户互不干扰。
4、服务器端,不应有static静态的属性,因为服务器是所有连接的客户端所共享的。
5、服务器端先运行,否则客户端会因为无法连接服务器端而产生错误。
服务器一直在监听。
然后客户端开始运行,并且请求连接服务器(TCP的连接是不需要用户名和密码的),连接成功后,发送数据。
TCP服务器与客户端间的数据传输示意图:
创建一个TCP服务器端程序的步骤
(1)创建一个ServerSocket
(2)从ServerSocket接受客户连接请求
(3)创建一个服务线程处理新的连接
(4)在服务线程中,从socket中获得I/O流
(5)对I/O流进行读写操作,完成与客户的交互
(6)关闭I/O流
(7)关闭Socket
2.4客户端模块设计
客户端设计要点:
1、客户根据提供的IP地址连接到相应的服务器;
2、服务器等待客户的连接,一旦连接成功,与该客户端建立了专线连接的Socket对象;
3、客户接收服务器发送的信息并显示。
客户端--“聊天”UI设计如下:
创建一个TCP客户端程序的步骤
(1)创建Socket
(2)获得I/O流
(3)对I/O流进行读写操作
(4)关闭I/O流
(5)关闭Socket
2.5数据传输加密设计
3实现
1.用户登录,在线用户注册。
2.客户端与服务器的TCP连接,实现消息的发送与接受
3.JavaSwing与多线程编程技巧
3.1界面模块实现
3.2用户客户端登录实现
3.3服务器模块实现
服务端:
1、 创建服务端ServerSocket,绑定指定端口号
ServerSocketserverSocket=newServerSocket(9999);
2、 阻塞,服务端等待接收客户端请求
Socketsocket=serverSocket.accept();
3、 获取服务端输入流,可以读取客户端写出的数据
InputStreamin=socket.getInputStream();
4、 获取服务端输出流,可以写出数据到客户端
OutputStreamout=socket.getOutputStream();
5、 服务端写出数据到客户端
out.write("欢迎拨打传智播客报名热线,请问需要什么帮助?
".getBytes());
6、 服务端读取客户端写出的数据.如果客户端还未写出,阻塞等待.
byte[]buffer=newbyte[1024];
intlen=in.read(buffer);
Stringmsg=newString(buffer,0,len);
System.out.println(msg);
7、释放资源
socket.close();
serverSocket.close();
3.4客户端模块实现
客户端:
1、创建客户端Socket,指定服务端地址和端口,连接服务器.本地地址和端口自动绑定.
Socketsocket=newSocket("192.168.1.254",9999);
2、获取客户端输入流,可以读取服务端写出的数据
InputStreamin=socket.getInputStream();
3、获取客户端输出流,可以写出数据到服务端
OutputStreamout=socket.getOutputStream();
4、客户端读取服务端写出的数据.如果服务端还未写出,阻塞等待
byte[]buffer=newbyte[1024];
intlen=in.read(buffer);
Stringmsg=newString(buffer,0,len);
System.out.println(msg);
5、客户端写出数据到服务端
out.write("我要报名JavaEE就业班!
".getBytes());
6、释放资源
socket.close();
3.5数据传输加密实现
(空2行)
总结(小3号黑体,居中)
×××××××××(小4号宋体,1.5倍行距)×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××…………
(空2行)
参考文献(小3号黑体,居中)
1胡曰利,吴晓芙.林木生长与养分动态模型研究V杉木林曲线[1].中南林学院学报,1999,19(4):
1-7
2曾思齐,欧阳君祥.马尾松低质低效次生林分类技术研究.[J].中南林学院学报,2002,22
(2):
12-16
3华罗庚,王元.论一致分布与近似分析.中国科学,1973(4):
339~357
4赵杰,李涛,朱慧.SQLServer数据库管理、设计与实现教程.北京:
清华大学出版社,2004.03
5
评分表:
课题名称
指导教师
评语
成绩评定
姓名
成绩
学号
日期
年月日