您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 广告经营 > Java网络聊天室报告
Java网络聊天室课程报告1系统开发的意义及需求分析1.1整体思路该C/S模式的聊天系统,就是服务器来提供服务端连接响应,客户端主动的发起连接请求。当多个用户同时连接到服务器时,经由服务器的接收与转发便可以实现客户之间的通信。对于整体系统的流程,也是分为两部分,即客户端的发起请求,服务器响应请求。首先是客户端设置所想要连接的服务器,然后客户端就会根据设置的服务器IP地址,向服务器发起建立连接请求。而服务器端是始终在监听网络状态的,主要检测到有一个连接请求,那么服务器就会给当前的发起端分配一个服务线程,用于处理它的各种请求。1.2功能需求分析实现网络聊天的功能,采用WindowsSocket(或JavaSocket)编程,服务器与客户端采用了TCP/IP连接方式,在设计聊天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端是所有信息的中心。聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务。服务器端的任务包括:1、服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接。2、服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。以上就是服务器端最主要的两个任务。不难看出,服务器端的任务并不复杂。客户端应该完成的任务包括:1、与服务器端建立通信通道,向服务器端发送信息。2、接收来自服务器的信息。相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述四个问题,即完成了该聊天系统的核心。2.系统分析与设计方案2.1开发环境及工具本系统所用的工具:服务器端:(Windows平台)首先应有java环境jdk,建议采用jdk1.4.2;Eclipse。客户端:java环境jdk,建议jdk1.4.2;Eclipse。本系统运行所需用到的环境为:硬件配置:中央处理器(CPU):P42.0G以上的处理器;硬盘:40GB以上硬盘;内存:256以上的DDR内存;显卡:128M以上显存显卡软件配置:WINDOWS7版本、All-In-One-Eclipse-311、j2sdk-1.42等。2.2系统功能流图图1系统功能流图功能流程说明如下:服务器serversocket监听建立与客户端连接的套接字1.读客户端信息2.向客户端转发信息关闭服务器客户端socket1.读服务端信息2.向服务器写信息关闭客户端启动ChatRoomClient.java启动ChatRoomServer.java(1)启动服务器程序,服务器端创建一个ServerSocket对象,指定端口号。(2)ServerSocket对象等候客户端的连接请求。(3)启动客户端程序。(4)客户端创建一个Socket对象,指定主机地址和端口号,向服务器发送连接请求。(5)服务器端收到客户端请求,建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象进行通信。(6)服务器端和客户端分别建立字节输入/输出流,进行数据传输准备。(7)服务器端和客户端通过各自的字节输入流获得对方发送过来的数据,通过字节输出向对方发送数据。(8)一方决定结束通信,向对方发送结束信息,另一方收到结束信息后,双方分别关闭各自的TCP连接。(9)对象停止等候客户端连接请求。2.3多用户实时工作原理图图2多用户实时工作原理图注:服务器的run()方法中采用了while(true)结构,不断监听客户端的请求,如收到请求,建立与当前请求的客户端连接的套接字,从而与客户端建立联系。3.系统实现与最终效果3.1系统工作的过程:本系统的编译环境,及编写平台为java。主要用到的类为java.net包中的Socket类。以服务器所在的主机的ip为“220.167.46.7”所侦听的端口号为“6666”。分别先后启动服务器和客户端应用程序,客户端用户填入服务器的地址,当服务器收到客户端的登录请求后,客户端和服务器通过套接字建立了联系。建立连接后双方就可以相互通信:客户端在自己的文本框输入要发送的信息点击发送后,发送的信息就会显示在服务器和目的客户端的文本域中,同样服务器也可以在自己的文本框输入系统信息,点击发送信息按钮后,发送的信息就会显示在服务器和客户端的文本域中。3.2使用方法1.双击server.jar,如果服务器不在自己电脑上,在确定服务器开启的情况下进入第二步;2.双击clien.jar;3.在打开的client端,在连接的窗口输入服务器的地址,如果服务器就在自己的电脑上可输入本机计算机名或ip,如果在其他主机上则输入服务器的ip;4.点击“连接”;5.如果连接成功,显示Connectsucessfully.6.现在在消息一栏输入你想说的话,确定你自己所属的线程,即可聊天.3.3各功能模块运行效果1.ChatRoomServer.服务器:(1)界面提示和记录多线程的使用。(2)广播多线程信息。2.ChatRoomClient客户端:(1)用ip链接任意匹配服务器(2)用户界面交流3.两个用户链接到服务器进行交流(1)服务器端显示(2)客户端显示设在客户机上的客户端界面设在服务器端的客户界面4.多个用户之间开始交流,进行通信.5.多人进行通信4.主要程序源代码ChatRoomServer.服务器当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象。publicvoidrun(){//接受连接并记录线程信息inti=0;try{//无限循环实现多线程,实现与多个用户的同时连接while(true){SocketclientSock=serverSock.accept();//监听并接受客户的请求CommunicateThreadct=newCommunicateThread(clientSock,this,index);//创建线程保持连接clients.add(ct);//recordCommunicateThread;i++;index++;//version2clientsInfor.add(Thread-+i);processMsg(Thread-+i+joinin\n);}}catch(IOExceptione){processMsg(e.toString());}}广播线程,读取每个连接线程的信息并把信息以字符串的形式发送出去。publicvoidrun(){try{while(true){for(inti=0;ichatClients.size();i++){comThread1=(CommunicateThread)chatClients.get(i);msgStack=comThread1.inforStack;//得到每个连接的信息栈clientName=(String)clientMsg.get(i);//客户名//读取每个连接线程的信息栈并把信息发送出去for(intj=0;jmsgStack.size();j++){string=(String)msgStack.get(j);broadcastInfor=clientName+-+string;broadcast(broadcastInfor);}msgStack.removeAllElements();//清除以发送的信息}try{Thread.sleep(100);//version2}catch(InterruptedExceptionex){}}}catch(Exceptione){}}ChatRoomClient客户端处理与客户端的通讯线程,因为使用了while(true)无限循环,使得客户端能不断更新聊天纪录,实现了实时聊天publicvoidrun(){Stringmsg;isTrue=true;while(isTrue){try{msg=in.readLine();if(msg.equals(Serverexit!)){//serverexitprocessMsg(msg);stopRun();//终止线程}elseif(msg!=null){processMsg(msg);}Thread.sleep(1000);}catch(IOExceptione){processMsg(e.toString());}catch(InterruptedExceptionei){processMsg(ei.toString());}}try{//服务器退出关闭连接和相关的流sock.close();in.close();out.close();}catch(IOExceptionioe){}}5.功能模块测试对软件的测试在软件开发中非常重要也非常必要,软件分析、设计过程中难免有各种各样的错误,需要通过测试查找错误,以对软件进行修改和进一步完善。软件测试的目标是为了发现程序中的错误而执行程序的过程,好的测试方案是发现软件尽可能多的错误,从而对错误进行修改以提高软件质量。测试界面内容自行更改是否成功现在有测试人员班媛媛和倪莉莎的对话如下1.莉莎客户端2.班媛媛客户端3.莉莎现在更改自己的页面内容如下4.退出截图:一客户端退出5.服务器退出6.小结每次课程设计都是一个学习的升华,这次我做的课题是网络通信技术实现基于C/S模式的聊天室程序设计。为了使课程设计能够顺利的进行,刚拿到任务书,我就开始复习课本和软件工程中的相关知识,并去图书馆查阅了很多资料,大致熟悉了课题所需要的知识点。然后拟定Java设计的框架,全面布局设计的界面。准备工作完成之后开始编写代码了,事实远超出了我当初想象的那样简单。在实际的代码设计中,我碰到了很多难以解决的困难。首先是不知道怎么构建框架,等大致有了框架,却不知道怎么让这个框架有血有肉,去实现应有的功能。因为有了开始的准备工作,后来的事情就简单多了。之前我上网查询相似代码学习借鉴,现在就把那些代码用上了,虽然常常出些问题,但是因为有老师的指导,一切都迎刃而解,课程设计不久就完成了。
本文标题:Java网络聊天室报告
链接地址:https://www.777doc.com/doc-4922898 .html