下载

2下载券

加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 聊天系统软件制作

聊天系统软件制作.doc

聊天系统软件制作

叶熙
2011-01-03 0人阅读 举报 0 0 0 暂无简介

简介:本文档为《聊天系统软件制作doc》,可适用于高等教育领域

毕业论文毕业论文题目:聊天系统软件制作班级:计算机应用()班学号:姓名:桑真友指导教师:马汝成完成时间:年月日摘要随着互联网技术的飞速发展基于网络的即时通信给人们带来诸多便利也成为当今网络应用的主流。聊天工具作为当今使用最为广泛的即时通信工具之一可以方便人们随时随地进行在线交流比如腾讯公司的QQ聊天软件。本毕业设计就是模拟QQ聊天软件开发一个包括文字聊天、文件传输、语音及视频交流等功能的聊天软件。本设计的开发采用socket结构在基于Socketjava开发环境下使用JAVA语言设计进行本软件的开发。本文首先论述国内外聊天工具的发展情况和现今的发展方向并对开发环境和开发语言进行了简单介绍对本设计所要开发的多功能聊天软件作了较为详细的需求分析并给出了多功能聊天软件的设计方案主要功能包括文字聊天、文件传输、语音聊天及视频聊天等本毕业设计主要实现的是多功能聊天软件的部分功能即语音聊天、视频聊天等功能主要实现用户注册、用户登录、用户之间语音、视频聊天功能与另一位同学开发实现的文字聊天与文件传输模块集成在一起构成一个实用的、功能完善的聊天软件达到预期目标通过运行、测试与分析说明该多功能聊天软件运行稳定、可靠具有一定的实用价值。本设计课题―用JAVA语言设计即时通讯系统是为了更好的满足人们的网上聊天和彻底的实现两台计算机之间点对点的信息交流的需求提出来的也是当今网络迅速发展的结果。关键词:局域网聊天socketjavaABSTRACTAlongwiththerapiddevelopmentofInternettechnology,basedonthenetworkinstantcommunicationpeoplebringsmanyconvenient,alsobecomethemainstreamofthecurrentnetworkapplicationsChattingtoolsasthemostwidelyusedinstantcommunicationtools,canoneconvenientforpeopletobedoneanywhereandanytimeonlineexchanges,suchastecentcompanyQQchatsoftwareThegraduationdesignissimulatedQQchatsoftware,developaincludingtextchat,voice,andvideofiletransferandcommunicationfunctionofchatsoftwareThisdesigndevelopmentusingsocketstructure,basedonsocketJavadevelopmentenvironment,useJavalanguagedesignforthesoftwaredevelopmentThispaperfirstdiscussesthedevelopingsituationofdomesticandforeignchattingtoolsandcurrentdevelopmentdirection,andthedevelopmentenvironmentanddeveloplanguageissimplyintroduced,Thisdesigntodevelopmultifunctionalchatsoftwaredetailrequirementanalysis,andgivesthemultifunctionchatsoftware,thedesignofthemainfeaturesincludetextchat,filetransfer,voicechatandvideochat,etcThegraduationdesignmainlyrealizesthemultifunctionchatsoftwareispartofthefunctions,namelyvoicechat,videochat,andotherfunctions,mainlyrealizesuserregistration,userlogin,betweenusersvideochatfunctionpronunciation,WithanotherclassmatedevelopmentfirmKeywords:LANchatsocketJava目录TOCo""hzu摘要IABSTRACTII目录III第一章、绪论JAVA的网络功能与编程JAVA概述JAVA的特点JAVA语言在网络上的应用JavaBeans技术开发可重用组件可行性分析从经济上分析从技术上分析第二章、系统分析与设计方案聊天系统的总体设计要点数据库设计聊天系统的设计步骤及功能模块划分聊天系统工作原理图聊天系统各功能模块功能模块结构图第三章、详细设计规划设计课题来源需求分析主程序设计第四章、系统设计环境与测试开发环境和工具聊天系统的测试总结与展望参考文献致谢附录第一章、绪论JAVA的网络功能与编程JAVA概述Java语言其实最早是诞生于年起初被称为OAK语言是SUN公司为一些消费性电子产品而设计的一个通用环境。他们最初的目的只是为了开发一种独立于平台的软件技术而且在网络出现之前OAK可以说是默默无闻甚至差点夭折。但是网络的出现改变了OAK的命运。  在Java出现以前Internet上的信息内容都是一些乏味死板的HTML文档。这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些交互式的内容开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序当然这些程序还要有极大的安全保障。对于用户的这种要求传统的编程语言显得无能为力而SUN的工程师敏锐地察觉到了这一点从年起他们开始将OAK技术应用于WEB上并且开发出了HotJava的第一个版本。当SUN公司年正式以Java这个名字推出的时候几乎所有的WEB开发人员都想到:噢这正是我想要的。于是Java成了一颗耀眼的明星丑小鸭一下了变成了白天鹅。Java的开发环境有不同的版本如sun公司的JavaDevelopmentKit简称JDK。后来微软公司推出了支持Java规范的MicrosoftVisualJJava开发环境简称VJ。JAVA的特点.简单(Simple)简单易学不存在指针、单一继承、内存空间自动回收面向对象(Objectoriented)类和对象数据和方法的封装封装、继承、多态性注重于数据和操作数据的方法而不是流.解释性(Interpreted)Java编译器生成字节码Java解释器执行字节码链接过程简单仅仅将新的类装载(load)入运行环境.平台独立(Architectureneutral)和可移植(Portable)Java编译器产生的字节码(bytecode)可运行在异种网络环境中(不同的硬件系统和不同的操作系统)Java程序在不同的平台中行为一致不存在数据类型的不一致等现象鲁棒健壮(Robust)和安全(Secure)取消了指针的不安全性增强了程序的健壮性内存管理简单“new”构造对象对象释放(automaticgarbagecollection)可靠的语言:compiletimechecking和runtimechecking网络环境的应用不会产生恶意行为为Java程序构造一个个(Sandbox具有安全策略的限制)提高了安全性.多线程(Multithreaded)例:浏览器应用中播听音乐拖动页面后台下载页面线程类:javalangThreadRunnableThreadGroup等原语支持:synchronized、wait()、notify().分布式(Distributed)支持网络应用,javanet*URL类Socket类、ServerSocket类DatagramSocket类、DatagramPacket类.高性能(Highperformance)解释性的语言没有C语言快“JustInTime”JIT编译器在运行时将Java字节码转变为机器码JavaHotSpotCompilers动态(Dynamic)Java语言在执行的链接(link)阶段是动态的class类仅在需要时被链接被链接的代码模块可以有不同的来源从本地或从网络体系结构中立Java解释器生成与体系结构无关的字节码指令只要安装了Java运行时系统Java程序就可在任意的处理器上运行。这些字节码指令对应于Java虚拟机中的表示Java解释器得到字节码后对它进行转换使之能够在不同的平台运行。可移植性与平台无关的特性使Java程序可以方便地被移植到网络上的不同机器。同时Java的类库中也实现了与不同平台的接口使这些类库可以移植。另外Java编译器是由Java语言实现的Java运行时系统由标准C实现这使得Java系统本身也具有可移植性JAVA语言在网络上的应用 一、Java网络应用模型  和Internet上的许多环境一样完整的Java应用环境实际上也是一个客户机服务器环境更确切地说是浏览器服务器模型(即BrowserServer模型简称Web模型)。但与传统的客户机服务器(CS)的二层结构不同应用Java的Web模型是由三层结构组成的。传统的CS结构通过消息传递机制由客户端发出请求给服务器服务器进行相应处理后经传递机制送回客户端。而在Web模型中服务器一端被分解成两部分:一部分是应用服务器(Web服务器)另一部分是数据库服务器。针对分布式计算环境Java通过其网络类库提供了良好的支持。对数据分布Java提供了一个URL(UniformResourceLocator)对象利用此对象可打开并访问网络上的对象其访问方式与访问本地文件系统几乎完全相同。对操作分布Java的客户机服务器模式可以把运算从服务器分散到客户一端(服务器负责提供查询结果客户机负责组织结果的显示)从而提高整个系统的执行效率增加动态可扩充性。Java网络类库是Java语言为适应Internet环境而进行的扩展。另外为适应Internet的不断发展Java还提供了动态扩充协议以不断扩充Java网络类库。Java的网络类库支持多种Internet协议包括Telnet,FTP和HTTP(WWW)与此相对应的Java网络类库的子类库为:JavanetJavanetftpJavanetwwwcontentJavanetwwwhtmlJavanetwwwhttp 这些子类库各自容纳了可用于处理Internet协议的类和方法。其中javanet用于处理一些基本的网络功能包括远程登录(Telnet)javanetftp用于处理ftp协议javanetwwwcontent用于处理WWW页面内容javanetwwwhtml和javanetwwwhttp则分别提供了对HTML语言和HTTP协议的支持。二、客户机服务器环境下的Java应用程序客户机服务器在分布处理过程中使用基于连接的网络通信模式。该通信模式首先在客户机和服务器之间定义一套通信协议并创建一Socket类利用这个类建立一条可靠的链接然后客户机服务器再在这条链接上可靠地传输数据。客户机发出请求服务器监听来自客户机的请求并为客户机提供响应服务。这就是典型的"请求应答"模式。下面是客户机服务器的一个典型运作过程:、服务器监听相应端口的输入、客户机发出一个请求、服务器接收到此请求、服务器处理这个请求并把结果返回给客户机、重复上述过程直至完成一次会话过程。按照以上过程我们使用Java语言编写一个分别针对服务器和客户机的应用(Application)。该程序在服务器上时程序负责监听客户机请求为每个客户机请求建立Socket连接从而为客户机提供服务。本程序提供的服务为:读取来自客户机的一行文本反转该文本并把它发回给客户机。 通过该程序实例我们看到使用Java语言设计CS程序时需要注意以下几点:()、服务器应使用ServerSocket类来处理客户机的连接请求。当客户机连接到服务器所监听的端口时ServerSocket将分配一新的Socket对象。这个新的Socket对象将连接到一些新端口负责处理与之相对应客户机的通信。然后服务器继续监听ServerSocket处理新的客户机连接。Socket和ServerSocket是Java网络类库提供的两个类。()、服务器使用了多线程机制。Server对象本身就是一个线程它的run()方法是一个无限循环用以监听来自客户机的连接。每当有一个新的客户机连接时ServerSocket就会创建一个新的Socket类实例同时服务器也将创建一新线程即一个Connection对象以处理基于Socket的通信。与客户机的所有通信均由这个Connection对象处理。Connection的构造函数将初始化基于Socket对象的通信流并启动线程的运行。与客户机的通信以及服务的提供均由Connection对象处理。()、客户机首先创建一Socket对象用以与服务器通信。之后需创建两个对象:DataInputStream和PrintStream前者用以从Socket的InputStream输入流中读取数据后者则用于往Socket的OutputStream中写数据。最后客户机程序从标准输入(如:控制台)中读取数据并把这些数据写到服务器在从服务器读取应答消息然后把这些应答消息写到准输出。以下分别为服务器和客户机端的源程序清单。本程序在NT网络环境(TCPIP)下使用JDK调试通过。JavaBeans技术开发可重用组件类是Java语言用来封装对象的基本单位。当类的构建沿用了JavaBeans的各种约定时它就被称作JavaBean可以被加到组件库中以更好地重用。 造个打招呼的词  开发一个简单的HelloBean学习如何在NetBeans中完成JavaBean的开发。  操作步骤如下。  打开"文件"菜单→"新建项目"。弹出"新建项目"对话框在项目栏中选择"Java类库"。点击"下一步"。在"名称和位置"栏中输入项目名"HelloBean"点击"完成"。  选中项目"HelloBean"下的"SoucePackage",在右键菜单中选中"新建"→"Java类…"。在"新建Java类"对话框中输入类名"HelloBean"包"course"。点击"完成"。  在NetBeansIDE中编辑文件HelloBeanjava。其代码如下:  packagecourse  publicclassHelloBeanStringnamepublicStringhello()return"Hello!"name  它包含一个属性(问候人的名称)和一个方法(生成问候的句子)。  重构。上面的代码并不符合JavaBean的约定还要进一步重构。在源代码编辑器中单击右键选择"重构"→"封装字段(T)…"。在"封装字段"的对话框中如图所示选择创建setter和getter方法并设字段的可视性为"private"。点击"重构"按钮。图NetBeans中封装字段的对话框重构后的代码如下:  packagecourse  publicclassHelloBeanprivateStringnamepublicStringhello()return"Hello!"getName()  publicStringgetName()returnname  publicvoidsetName(Stringname)thisname=name  JavaBeans规范建议对属性的读写通过getset方法进行并不鼓励直接访问属性。这一规定使得属性中的数据更加安全并可以通过重写getset方法定制读写的方式。  查看成员。选择"HelloBeanjava"在右键弹出的菜单中选择"文件成员"。可以看到HelloBean的成员如图所示。这个图所示的信息是通过JavaBean的内省功能得到的。图NetBeans中显示类中成员的对话框  加入组件面板。  选择"HelloBeanjava"在右击弹出的菜单中选择"工具"→"添加到组件面板中"。  至此所造的新词"HelloBean"已经放在了组件库中可以被别人使用了。  通过开发和使用可重用组件可以做到以较小的改动来应对不断变化的需求避免重复开发和测试。可行性分析从经济上分析该聊天程序作为本人的毕业设计硬件设备只需要一台连接到互联网的计算机以便我在开发中所遇到的问题可以上网查询资料还有就需要阅读一些关于java方面的书籍来参考。从技术上分析该聊天程序是一个可视化界面操作的主要是文件系统对数据进行存储、更新与维护。使用MyEclipse为开发平台它的Swing编程可以可以实现系统的可视化同时它为我们提供了许多接口技术。第二章、系统分析与设计方案聊天系统的总体设计要点   聊天系统的设计跟普通网站设计有着许多不同的地方普通网站设计所考虑的因素例如普通网站需要对布局进入大量美化以及动画设计等等而聊天室只要提供满足访客双方直接实时聊天即可。因此在设计聊天系统的过程中必须要考虑好以下几个设计要点:、实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应使用者通过客户端程序登录到服务器就可以与登录在同一服务器上的用户交谈这是一个面向连接的通信过程。因此程序要在TCPIP环境下实现服务器端和客户端两部分程序。、服务器端工作流程服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目)与指定的本地端口绑定bind()就可以在端口进行侦听listen()。如果有客户端连接请求则在数组中选择一个空Socket将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。、客户端工作流程客户端程序相对简单只需要建立一个Socket与服务器端连接成功后通过这个Socket来发送和接收数据就可以了。数据库设计系统可以采用任何一种流行的Java支持的数据库本系统采用了Microsoft公司的SQLServer作为后台数据库。通过对现在流行的一些Icq的参考建立数据库名为javaicq,数据库共建立两个表一个是用户的基本信息,包括呢称Jicq号码等。一个是用户的好友表包括用户自己的号码和好友的号码。表用户的基本信息表序号字段名含义数据类型Icqno用户的号码IntNoNickname用户的呢称CharNoPassword用户的密码CharNoStatus用户在线否BitNoIp用户的IP地址CharYesInfo用户的资料VarcharYesPic用户的头像号IntYesSex用户性别CharYesEmail用户的emailCharYesPlace用户的籍贯Charyes其中Icqno字段为自动增加。(其他还可以添加诸如电话号码等字段作为更多选择)表用户的好友表序号字段名含义数据类型Icqno用户的号码IntNoFriend好友的号码IntNo聊天系统设计步骤功能模块划分聊天系统工作原理图图客户与服务器的关系聊天系统各功能模块()服务器程序模块服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单JavaAPI为处理套接口的通信提供了一个类javanetSocket使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求并通过创建一个ServerSocket对象来监听来自客户的连接请求默认端口为然后无限循环调用accept()方法接受客户程序的连接。服务器线程源码:packageqqserverimportjavaioIOExceptionimportjavaioObjectInputStreamimportjavaioObjectOutputStreamimportjavanetSocketimportjavautil*importqqdaohibernateIServiceDaoimportqqentity*publicclassServerController{privateUseruserprivateSocketsprivateIServiceDaodaoprivateObjectInputStreamoisprivateObjectOutputStreamoosprivateOnlineUseronlineUserpublicServerController(Sockets){super()dao=ServerMainClassuserDaothiss=s}publicvoidhandle()throwsException{ois=newObjectInputStream(sgetInputStream())oos=newObjectOutputStream(sgetOutputStream())onlineUser=newOnlineUser(ois,oos)while(true){Requestreq=(Request)oisreadObject()oisread()RequestTypetype=reqgetType()if(typeequals(RequestTypeexit)){exitHandle()break}elseif(typeequals(RequestTypelogin)){loginHandle(req)}elseif(typeequals(RequestTyperegister)){registerHandle()}elseif(typeequals(RequestTypeoffline)){offlineHandle()break}elseif(typeequals(RequestTypechangeInformation)){changeInformationHandle()}elseif(typeequals(RequestTypemodifypasswd)){modifypasswdHandle(req)}elseif(typeequals(RequestTypesendMessage)){sendMessageHandle(req)}elseif(typeequals(RequestTypereceiveFile)){receiveFileHandle(req)}elseif(typeequals(RequestTypesendFile)){sendFileHandle(req)}}}privatevoidmodifypasswdHandle(Requestreq){Longid=LongparseLong(reqgetData("id"))Stringoldpwd=reqgetData("oldpwd")Stringnewpwd=reqgetData("newpwd")Responseres=newResponse(RequestTypemodifypasswd)try{daoupdatePwd(id,oldpwd,newpwd)ressetData()try{ooswriteObject(res)}catch(IOExceptione){eprintStackTrace()}}catch(RuntimeExceptione){try{ooswriteObject(res)}catch(IOExceptione){eprintStackTrace()}}}privatevoidchangeInformationHandle(){try{Useruser=(User)oisreadObject()Responseres=newResponse(RequestTypechangeInformation)try{daoupdateUser(user)ressetData()修改成功返回值带一个整形值ooswriteObject(res)oosflush()}catch(RuntimeExceptione){ooswriteObject(res)失败则返回值不带参数oosflush()eprintStackTrace()}}catch(IOExceptione){eprintStackTrace()}catch(ClassNotFoundExceptione){eprintStackTrace()}}privatevoidexitHandle(){try{sclose()}catch(IOExceptione){eprintStackTrace()}}发送文件privatevoidsendFileHandle(Requestreq){try{Useru=(User)oisreadObject()}catch(Exceptione){eprintStackTrace()}}接受文件privatevoidreceiveFileHandle(Requestreq){}发送消息privatevoidsendMessageHandle(Requestreq){Responseres=newResponse(RequestTypereceiveMessage)Messagemessage=try{message=(Message)oisreadObject()ressetData(message)}catch(IOExceptione){eprintStackTrace()}catch(ClassNotFoundExceptione){eprintStackTrace()}Userto=messagegetTo()if(to==){sendToAllUser(res)如果收信人为则发送信息给所有人}else{发送信息给to和他自己Responseres=newResponse(RequestTypeindividualTalk)ressetData(message)ObjectOutputStreamo=Set<User>set=ServerMainClassuserMapkeySet()Iteratorit=setiterator()while(ithasNext()){Useru=(User)itnext()if(uequals(to)){o=ServerMainClassuserMapget(u)getOos()break}}try{owriteObject(res)oflush()}catch(IOExceptione){eprintStackTrace()}}}下线privatevoidofflineHandle(){try{ServerMainClassuserMapremove(user)Responseres=newResponse(RequestTypeoffline)ressetData(user)把下线用户发送给所有客户端sendToAllUser(res)sclose()}catch(IOExceptione){eprintStackTrace()}}privatevoidregisterHandle(){Useruser=daoaddUser()try{ooswriteObject(user)Systemoutprintln(usergetId()":"usergetName())oosflush()}catch(IOExceptione){eprintStackTrace()}}登录privatevoidloginHandle(Requestreq){Longid=LongparseLong((String)reqgetData("id"))Stringpwd=(String)reqgetData("pwd")user=daogetUser(id,pwd)Responserestry{Set<User>users=ServerMainClassuserMapkeySet()Iteratoriter=usersiterator()while(iterhasNext()){Useru=(User)iternext()if(uequals(user)){res=newResponse(RequestTypehaveOnline)ooswriteObject(res)oosflush()return该用户已经在线}}res=newResponse(RequestTypeonline)ressetData(user)ooswriteObject(res)oosflush()给刚上线用户发送在线用户列表if(user!=){Set<User>set=ServerMainClassuserMapkeySet()ooswrite(setsize())Iteratorit=setiterator()while(ithasNext()){ooswriteObject(itnext())}oosflush()sendToAllUser(res)通知在线用户有新用户上线ServerMainClassuserMapput(user,onlineUser)保存用户信息}}catch(IOExceptione){eprintStackTrace()}}privatevoidsendToAllUser(Responseres){try{Collectionc=ServerMainClassuserMapvalues()Iteratorit=citerator()while(ithasNext()){ObjectOutputStreamo=((OnlineUser)itnext())getOos()owriteObject(res)oflush()}}catch(IOExceptione){eprintStackTrace()}}}()客户程序模块客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造ObjectInputStream,ObjectOutputStream来建立输入输出流然后双方通过该输入输出流来相互传递信息一旦收到客户方的连接请求服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息比如文件传输等服务器收到来自客户的请求后针对不同的消息处理请求。具体的源码如下:packageqqclientimportjavaawtColorimportjavaioEOFExceptionimportjavaioObjectInputStreamimportjavaioObjectOutputStreamimportjavaxswingJOptionPaneimportjavaxswingJTextPaneimportjavaxswingtextBadLocationExceptionimportjavaxswingtextSimpleAttributeSetimportjavaxswingtextStyleConstantsimportjavanet*importjavautilCalendarimportqqclientpanelUserListPanelimportqqclientwindowsIndividualTalkWindowimportqqentity*publicclassClientThreadextendsThread{privateObjectInputStreamoisprivateObjectOutputStreamoosprivateSocketsprivateJTextPanereceiveprivateJTextPanerecordprivateJTextPanepublicInfoprivateUserListPaneluserListprivateSimpleAttributeSetsetpublicClientThread(JTextPanereceive,JTextPanerecord,JTextPanepublicInfo,UserListPaneluserList){thisreceive=receivethisrecord=recordthispublicInfo=publicInfothisuserList=userLists=ClientMainClasssocketois=ClientMainClassoisoos=ClientMainClassoosset=newSimpleAttributeSet()StyleConstantssetFontSize(set,)StyleConstantssetFontFamily(set,"宋体")StyleConstantssetForeground(set,newColor(,,))}Overridepublicvoidrun(){while(sisConnected()){try{Responseres=(Response)oisreadObject()if(res!=){RequestTypetype=resgetType()if(typeequals(RequestTypeonline)){onlineHandle(res)}elseif(typeequals(RequestTypeoffline)){offlineHandle(res)}elseif(typeequals(RequestTypechangeInformation)){changeInformationHandle(res)}elseif(typeequals(RequestTypemodifypasswd)){modifypasswdHandle(res)}elseif(typeequals(RequestTypereceiveMessage)){receiveMessageHandle(res)}elseif(typeequals(RequestTypeindividualTalk)){individualTalkHandle(res)}elseif(typeequals(RequestTypereceiveFile)){receiveFileHandle(res)}elseif(typeequals(RequestTypepublicInfo)){publicInfoHandle(res)}}}catch(EOFExceptione){eprintStackTrace()}catch(Exceptione){eprintStackTrace()}}}privatevoidmodifypasswdHandle(Responseres){if(resgetData()!=){JOptionPaneshowMessageDialog(,"密码修改成功")}else{JOptionPaneshowMessageDialog(,"密码修改失败n服务器忙请稍后再试!")}}privatevoidchangeInformationHandle(Responseres){if(resgetData()!=){JOptionPaneshowMessageDialog(,"修改成功")}else{JOptionPaneshowMessageDialog(,"服务器忙请稍后再试!")}}privatevoidpublicInfoHandle(Responseres){Stringstr=(String)resgetData()publicInfosetText(str)}privatevoidreceiveFileHandle(Responseres){}privatevoidindividualTalkHandle(Responseres){Messagemessage=(Message)resgetData()Useruser=messagegetFrom()if(!ClientMainClassindividualcontainsKey(usergetId())){intflag=JOptionPaneshowConfirmDialog(,usergetName()"请求与你私聊是否接受","",JOptionPaneYESNOOPTION)if(flag==JOptionPaneNOOPTION){return}IndividualTalkWindowindi=newIndividualTalkWindow(user)ClientMainClassindividualput(usergetId(),indigetReceivedmessageArea()getTextPane())indishowMe()}JTextPanejtp=ClientMainClassindividualget(usergetId())try{输出信息发送人时间jtpgetDocument()insertString(jtpgetDocument()getLength(),usergetName()""messagegetTime()"n",set)}catch(BadLocationExceptione){eprintStackTrace()}输出信息messageanalysisMessage(jtp)}privatevoidreceiveMessageHandle(Responseres){Messagemessage=(Message)resgetData()if(ClientMainClassshieldcontains(messagegetFrom()getId())){return}try{输出信息发送人时间receivegetDocument()insertString(receivegetDocument()getLength(),messagegetFrom()getName()""messagegetTime()"n",set)}catch(BadLocationExceptione){eprintStackTrace()}输出信息messageanalysisMessage(receive)}privatevoidofflineHandle(Responseres){Useruser=(User)resgetData()ClientMainClassonlineUsersremove(user)userListfreash(ClientMainClassonlineUsers)Calendarc=CalendargetInstance()Stringtime=cget(CalendarYEAR)""cget(CalendarMONTH)""cget(CalendarDAYOFMONTH)""(cget(CalendarHOUROFDAY))":"cget(CalendarMINUTE)":"cget(CalendarSECOND)try{receivegetDocument()insertString(receivegetDocument()getLength(),usergetName()""time"下线n",set)}catch(BadLocationExceptione){eprintStackTrace()}}privatevoidonlineHandle(Responseres){Useruser=(User)resgetData()ClientMainClassonlineUsersadd(user)userListfreash(ClientMainClassonlineUsers)Calendarc=CalendargetInstance()Stringtime=cget(CalendarYEAR)""cget(CalendarMONTH)""cget(CalendarDAYOFMONTH)""(cget(CalendarHOUROFDAY))":"cget(CalendarMINUTE)":"cget(CalendarSECOND)try{receivegetDocument()insertString(receivegetDocument()getLength(),usergetName()""time"上线n",set)}catch(BadLocationExceptione){eprintStackTrace()}}}功能模块结构图图功能模块结构图功能模块结构图第三章、详细设计规划设计课题来源根据当前网络的需求网络聊天越来越受各种网民所青睐。因此开发网络聊天是相当有必要而且在网站内增加聊天功能它不仅可以提高网站的访问量同时可以留着访客更重要的是让访客透过聊天室实时的互相交流。而本人也学习过JAVA语言对网络编程也较有兴趣为了更好的考验自己对JAVA语言的掌握程度本人就决定以《基于JAVA聊天设计与实现》为毕业设计希望通过这一次的能进一步提高本人的网络开发编程的能力。需求分析聊天系统不外乎两个方面服务器端和客户端。简单分析一下两个方面所要完成的任务对设计这个程序来说等于完成了一半。首先来看一下服务器端的任务:  1.服务器端应当建立一个ServerSocket并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。  2.服务器端应当是一个信息发送中心所有客户端的信息都传到服务器端由服务器端根据要求分发信息。  以上就是服务器端最主要的两个任务。不难看出服务器端的任务并不复杂。  客户端应该完成的工作包括:  1.与服务器端建立通信通道向服务器端发送信息。  2.接收来自服务器的信息。相对服务器而言客户端的任务更加简单有了以上的简单分析可以知道解决上述四个问题即完成了该聊天系统的核心。主程序设计importjavaio*

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

评分:

/36

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利