局域网内的多功能聊天室的设计与实现_第1页
局域网内的多功能聊天室的设计与实现_第2页
局域网内的多功能聊天室的设计与实现_第3页
局域网内的多功能聊天室的设计与实现_第4页
局域网内的多功能聊天室的设计与实现_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

./JISHOUUNIVERSITY专业课课程论文题目:局域网的多功能聊天室的设计与实现作者:学号:所属学院:信息科学与工程学院专业年级:总评分:完成时间:大学信息科学与工程学院局域网的多功能聊天室的设计与实现〔大学信息科学与工程学院,416000摘要在计算机技术飞速发展的今天,随着Internet的普及和发展,人们的生活和工作也越来越离不开信息网络的支持,而聊天室是人们最常见、最直接的网上交流的方式。本论文主要研究一个以网络交友为主,为广大用户提供一个借助网络进行人际交往的信息平台。本文所设计的局域网聊天系统是基于开放的WEB服务器应用程序开发设计的,其主要特征是能动态完成信息的传递且具有高效的交互性,有效的处理客户请求且具有更简单、更方便的数据库访问方法,易于维护和更新。这种技术程序由JAVA、HTML、数据库和脚本语言组合而成。主要功能模块包括:用户登录、注册部分;编写和显示聊天记录部分;管理员管理聊天室的管理部分。聊天系统编写和显示聊天记录部分界面友好,提供动作、表情、公聊或私聊等操作;管理部分可以删除不守规矩的注册用户、踢出在线用户以及删除某些不合时宜的聊天记录等、根据数据库需求分析,在ACCESS中定义3个表:用user表来存放注册用户信息、用activetable表来存放当前在线用户信息以及用message表来存放聊天记录。本系统相比较其他信息交流平台具有开发方便、快捷,占用资源少,维护方便等优点。[关键词]Java,数据库,脚本语言,聊天系.LANofmulti-functionchatroomdesignandImplementationRaotao<CollegeofInformationScienceandEngineering,JishouUniversity,JishouAbstractTherapiddevelopmentofcomputertechnologytoday,withthepopularityanddevelopmentofInternet,people'sworkandlifehasbecomeincreasinglyinseparablefromthesupportoftheinformationnetwork,andthechatroomisoneofthemostcommon,themostdirectonlinecommunicationmode.Inthisthesis,anetworkoffriends,forthevastnumberofuserswithanetworkofhavetheaidofinterpersonalinformationplatform.ThedesignoftheLANchatsystemisbasedonanopenWEBserverapplicationdevelopmentanddesign,itsmaincharacteristicistocompletetheinformationtransmissiondynamicallywithhighinteractivity,effectivecustomerrequestandhasamoresimple,moreconvenientdatabaseaccessingmethod,easymaintenanceandupdate.ThetechnicalprogrambyJAVA,HTML,databaseandscriptlanguageandcombination.Themainfunctionmodulesinclude:userlogin,registrationsection;writeanddisplaychatrecordingpart;theadministratormanagethechatroommanagementsection.Chatsystemtoprepareanddisplaychatinterfacefriendly,withaction,expression,thepublicchatoroperation;managementcanremovetheunrulyregistereduser,playonlineuseranddeletecertainbeinopportuneorinappropriatechatrecords,accordingtothedatabaseneedsanalysis,definedinACCESS3:usertabletableforregisteredusersofinformation,usingactivetabletabletostorethecurrentonlineuserinformationandtheuseofmessagetabletostorethechatrecord.Thissystemiscomparedwithotherinformationexchangeplatformwiththedevelopmentofconvenient,fast,lessresourceoccupation,easymaintenanceandotheradvantages.Keywords:JAVA;datacapture;informationanalysis;Winpcap;Jpcap.目录第一章引言11.1课题背景及意义11.2课题研究现状11.3研究容21.4论文组织方式2第二章关键技术32.1java概述32.2套接字32.2.1Socket简介32.2.2Socket工作过程42.3TCP三次握手4第三章需求分析53.1功能需求53.2性能要求5处理数据能力5时间特性53.2.3数据库需求53.2.5其他标准的约束53.2.6外部接口需求63.2.7通信接口7第四章概要设计84.1体系结构设计84.1.1复审数据流、控制流8软件体系结构84.2模块设计94.2.1用户扫描系统模块94.2.2在线交流系统模块104.2.3系统配置系统11第五章详细设计145.1用户登录模块145.2用户列表模块155.3文本聊天模块17第六章测试及实现结果216.1测试环境216.2测试过程21用户登录及用户列表216.2.2文本聊天226.2.3文件传输25结束语27参考文献28.第一章 引言1.1课题背景及意义在网络越来越发达的今天,人们对网络的依赖越来越多,各种网络应用层出不穷,网络编程越来越受大广大程序员的重视。网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器〔C/S结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络聊天是网络编程的典型应用之一,编写网络聊天软件对于学习网络编程无疑有着很大的帮助。本小组编写本软件,旨在通过软件的编写与实现,来提高对网络编程的理解和掌握。1.2课题研究现状网络数据捕获技术是获取信息的关键技术,它通过监听技术,过滤技术获取原始数据,根据TCP/IP分层理论进行层层拆解,提取相关协议中的信息。本设计主要通过使用Java编写出了一款简单的软件对数据包信息进行捕获,捕获出所需要的敏感信息,并且将捕获出来的信息保存起来。Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由SunMicrosystems公司于1995年5月推出的Java程序设计语言和Java平台〔即JavaSE,JavaEE,JavaME的总称。Java技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台、科学超级计算机、移动和互联网,同时拥有全球最大的开发者专业社群。在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景[1]。1.3研究容网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。目前较为流行的网络编程模型是客户机/服务器〔C/S结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。网络聊天是网络编程的典型应用之一,编写网络聊天软件对于学习网络编程无疑有着很大的帮助。本软件旨在为同一局域网用户间提供便利的局域网服务,局域网用户可以通过此聊天软件在各终端相互发送聊天信息,同时可以快速传送文件,方便局域网用户间的快速有效通信。1.4论文组织方式首先,本论文从目前网络的安全现状开始,详细研究了本课题的背景以及意义,由于目前我国已经进入了网络时代,需要使用自己的网络聊天信息安全系统来保护自己的网络聊天信息系统,尤其是对于秘密性的信息,必须将网络安全和信息安全放在非常重要的地位。其次,在对本论文的背景有所了解的情况下,对本课题所必须的关键技术进行了介绍,包括java的概述,套接字,三次握手等。最后,在对所必须得基础知识有所了解的情况下,按照各模块的功能,分别详细介绍了各个功能的实现过程。..第二章 关键技术2.1java概述JAVA语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、安全、体系结构中立、可移植、高性能、多线程以及动态性。丰富的类库JAVA提供了大量的类以满足网络化、多线程、面向对象系统的需要。语言包提供的支持包括字符串处理、多线程处理、数学函数处理等,可以用它简单地实现JAVA程序的运行平台。实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。输入输出包用统一的"流"模型来实现所有格式的I/O,包括文件系统、网络、输入低级网络包用于实现Socket编程。抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件,包括窗口、菜单、滚动条、对话框等,使得JAVA可以移植到不同平台的机器。网络包支持Internet的TCP/IP协议,提供了与Internet的接口。它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。JAVA和C、C++对于变量声明、参数传递、操作符、流控制等使用了相同的传统,使得熟悉C、C++的程序员能很方便地进行编程。同时,JAVA为了实现其简单、鲁棒、安全等特性,也摒弃了C和C++中许多不合理的容。2.2套接字Socket简介Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个Socket,通过读写和客户端通信。Socket工作过程Socket程序的工作过程:1.建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。2.数据通信:利用虚拟连接通道传送数据信息进行通信。3.关闭:通信结束时,再将所建的虚拟连接拆除。2.3TCP三次握手第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧。第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,再向目的主机发送一个带有两次连接的序列号的确认。具体过程如下:图2.1三次握手协议第三章 需求分析3.1功能需求做为一个局域网的即时聊天程序,除了基本的聊天功能,文件传输也是经常用到的功能。本软件需具有以下几个功能:1.用户登录设立一个服务器,实现多用户即时通讯;用户在登录的同时需输入一些个性化的信息,以便于各用户之前的识别。2.文本聊天聊天室功能,即所谓的群聊,聊天容所有人可见;聊天功能,即所谓的私聊,聊天容仅聊天双方可见;用户可对字体进行设置。3.文件转输多线程,收发可同时进行。3.2性能要求处理数据能力时间特性响应时间:所有的发送操作响应时间一般不超过1秒,大量的信息发送,呈现应该在5秒显示或者提示相关出错信息。更新处理时间:所有提交数据一般在3秒相应。数据库需求聊天记录较多,在需要时能即时存取。相关配置信息,需要时能即时读取。设计约束其他标准的约束.1硬件约束奔腾4处理器及以上存:256M以需求规格说明书硬盘:50M以上剩余空间.2属性.2.1可用性.2.2可靠性.2.3效率.2.4安全性.2.5可维护性要求类的构建符合高聚低耦合度的要求外部接口需求.1用户接口用户界面:采用Windows的通用图形界面,对用户友好,且必须对鼠标键盘提供支持,界面设计应遵循:1.尽量保持一致性:界面规应遵循Winows软件界面的规2.设计完整的对话过程:系统的每一次对话都应该有明确的次序:开始、中间处理过程、结束。3.提供简单的错误处理机制4.提供信息反馈:用多种信息提示用户当前软件运行状态,软件界面元件的功能。5.操作可逆:其动作可以是单个的操作,或者是一个相对独立的操作序列。6.设计良好的联机帮助:.2软件接口本节指定需使用的其他软件产品〔如:数据管理系统、操作系统、数学软件包,以及同其他应用系统之间的接口。如果已有完整的接口文件,需在本节指明。说明容包括:a>接口标识;b>功能描述;c>数据流程和控制流程的方向;d>数据格式、容量;e>接口类型〔如手动或自动;f>接口数据中断的优先级别;g>中断响应时间;h>异常处理等。对每一个所需的软件产品,需提供名称、缩写、规格说明、版本号、来源等容。通信接口本产品用户各终端和服务器属于一个局域网,网采用TCP/IP或UDP协。.第四章 概要设计4.1体系结构设计复审数据流、控制流图4.1软件体系结构软件程序结构图图4.2结构图系统配置子系统图4.3系统配置子系统消息记录子系统图4.4消息记录子系统4.2模块设计用户扫描系统模块图4.5用户扫描系统模块图4.6用户扫描系统模块在线交流系统模块图4.7在线交流系统模块系统配置系统.1上线提示模块图4.8上线提示模块设置个人资料模块图4.9设置个人资料模块系统屏蔽模块图4.10系统屏蔽模块.第五章 详细设计5.1用户登录模块只列出程序界面以及与服务器端通讯部分的代码:图5.1用户登录模块客户端classConnectextendsJFrameimplementsActionListener,ItemListener,KeyListener{………………… publicvoidlink<>throwsException {//连接服务器 hostName=hostText.getText<>.trim<>; port=Integer.parseInt<portText.getText<>>; client=newSocket<hostName,port>;//创建一个流套接字并将其连接到指定IP地址的指定端口号。 in=newBufferedReader<newInputStreamReader<client.getInputStream<>>>; out=newPrintWriter<client.getOutputStream<>>; out.println<nameText.getText<>+"&"+sex>; out.flush<>; }……………………服务器端:publicstaticvoidaddConnection<Sockets,ClientProccp> { if<connections==null> { connections=newVector<Socket><>; } connections.addElement<s>; if<clients==null> { clients=newVector<ClientProc><>; } clients.addElement<cp>; } publicstaticvoiddeleteConnection<Sockets,ClientProccp> throwsIOException { if<connections!=null> { connections.removeElement<s>; s.close<>; } if<clients!=null> { clients.removeElement<cp>; } } publicstaticVectorgetClients<> { returnclients; }5.2用户列表模块只列出程序界面以及与服务器端通讯部分的代码:客户端: publicvoidvalueChanged<ListSelectionEvente> {//监听下拉列表的显示容 if<e.getSource<>==peopleList> { try { Stringselect=<String>peopleList.getSelectedValue<>; if<select!=null> {//确保选择非空 String[]userInfo=select.split<"〖">; Stringname=userInfo[0].trim<>;//提取名字 if<!name.equals<chf.myName>> {//不能添加自己 intcount=chf.perponsComboBox.getItemCount<>; for<inti=0;i<count;i++> { chf.perponsComboBox.setSelectedIndex<i>;//选择第i项 StringstrName=<String>chf.perponsComboBox .getSelectedItem<>; if<name.equals<strName>> {//如果已经在列表中,就复合框中选中,所以要确保没有重名 return; } } //如果没有添加,就会执行下面语句添加 chf.perponsComboBox.addItem<name>; } } }catch<Exceptionee> { System.out.println<"发生错误在valueChanged"+ee>; } } } publicvoidactionPerformed<ActionEvente> { if<e.getSource<>==refurbishButton> {//如果监听到要刷新列表 try { listModel.clear<>;//清空列表 chf.out.println<"refurbish">;//发送刷新请求到服务器 chf.out.flush<>; }catch<Exceptionee> { } } }服务器端:publicStringgetName<> { returnname; } publicStringgetSex<> { returnsex; } publicSocketgetSocket<> { returns; } privatevoidupdateList<> { //更新用户列表〔即发送当前在聊天室的用户到新来的用户列表中 Vectorcs=ChatServer.getClients<>; if<cs!=null> { for<Enumeratione=cs.elements<>;e.hasMoreElements<>;> { ClientProccp=<ClientProc>e.nextElement<>; Stringexist_name=cp.getName<>; Stringexit_sex=cp.getSex<>; /** *for<inti=0;i<cs.size<>;i++>{Stringexist_name *=<<ClientProc>cs.elementAt<i>>.getName<>;Stringexit_sex= *<<ClientProc>cs.elementAt<i>>.getSex<>; */ System.out.println<"old"+"&"+exist_name+"&"+exit_sex>; out.println<"old"+"&"+exist_name+"&"+exit_sex>; out.flush<>; } } }5.3文本聊天模块只列出程序界面以及与服务器端通讯部分的代码:图5.2文本聊天模块客户端:if<e.getSource<>==sentButton> {//如果监听到发送信息按钮被点击 try { mywords=inMsgField.getText<>; if<<mywords.trim<>>.length<>!=0> {//不能发送空消息也不能都发空格 if<withWho.equals<"所有人">> { outmsg=mywords; //发送到服务器 out.println<outmsg>; out.flush<>; //显示到我的频道里面 insert<myMsgArea,myName+":"+mywords>; //myMsgArea.setCaretPosition<myMsgArea.getText<>.length< //>>; }else {//对某个人交谈 outmsg="withWho"+"&"+"privateFalse"+"&" +withWho+"&"+mywords; if<privateTalkFlag> { outmsg="withWho"+"&"+"privateTure"+"&" +withWho+"&"+mywords; insert<myMsgArea,"您对『"+withWho+"』说:" +mywords>; //myMsgArea.setCaretPosition<myMsgArea.getText<>. //length<>>; }else { insert<myMsgArea,myName+"对『"+withWho+"』说:" +mywords>; } //myMsgArea.setCaretPosition<myMsgArea.getText<>.length< //>>; //发送到服务器 out.println<outmsg>; out.flush<>; } } }catch<Exceptionee> { ee.printStackTrace<>; insert<myMsgArea,"与服务器连接中断,请重新登录!">; //myMsgArea.setCaretPosition<myMsgArea.getText<>.length<>>; }finally { inMsgField.setText<"">;//清空输入框 } }服务器端:/****发送信息给所有的人*/ publicstaticvoidsendAll<Strings> { if<connections!=null> { for<Enumeratione=connections.elements<>;//Enumeration过时的接口, //可以用foreach循环 e.hasMoreElements<>;> { try { PrintWriterpw=newPrintWriter<<<Socket>e.nextElement<>> .getOutputStream<>>; pw.println<s>; pw.flush<>; }catch<IOExceptionex> { ex.printStackTrace<>; } } } System.out.println<s>; } /****发送信息给单独一个人*/ publicstaticbooleansendOne<Stringname,Stringmsg> { if<clients!=null> { for<Enumeratione=clients.elements<>;e.hasMoreElements<>;> { ClientProccp=<ClientProc>e.nextElement<>; if<<cp.getName<>>.equals<name>> { try { PrintWriterpw=newPrintWriter<<cp.getSocket<>> .getOutputStream<>>; pw.println<msg>; pw.flu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论