您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > 基于socket的网络聊天室
《JAVA程序设计》课程设计报告院系题目基于socket的Client/Server监听模式学生姓名学生学号专业班级指导教师完成时间(空2行)目录1需求分析…………………………………………………………………12系统设计……………………………………………………………………Y2.1界面模块设计…………………………………………………………Y2.2用户客户端登录验证设计……………………………………………Y2.3服务器模块设计…………………………………………………………Y2.4客户端模块设计…………………………………………………………Y2.5数据传输加密设计…………………………………………………………Y3实现……………………………………………………………………Y3.1界面模块实现…………………………………………………………Y3.2用户客户端登录验证实现……………………………………………Y3.3服务器模块实现…………………………………………………………Y3.4客户端模块实现…………………………………………………………Y3.5数据传输加密实现…………………………………………………………YX×××××(正文第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)关闭Socket2.4客户端模块设计客户端设计要点:1、客户根据提供的IP地址连接到相应的服务器;2、服务器等待客户的连接,一旦连接成功,与该客户端建立了专线连接的Socket对象;3、客户接收服务器发送的信息并显示。客户端--“聊天”UI设计如下:创建一个TCP客户端程序的步骤(1)创建Socket(2)获得I/O流(3)对I/O流进行读写操作(4)关闭I/O流(5)关闭Socket2.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-72曾思齐,欧阳君祥.马尾松低质低效次生林分类技术研究.[J].中南林学院学报,2002,22(2):12-163华罗庚,王元.论一致分布与近似分析.中国科学,1973(4):339~3574赵杰,李涛,朱慧.SQLServer数据库管理、设计与实现教程.北京:清华大学出版社,2004.035评分表:课题名称指导教师评语成绩评定姓名成绩学号日期年月日
本文标题:基于socket的网络聊天室
链接地址:https://www.777doc.com/doc-4426514 .html