




免费预览已结束,剩余23页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
毕业论文聊天系统的设计与开发摘 要从实际工程应用角度出发,以计算机网络原理为指导,结合当前网络中的一些常用技术开发了本聊天室工具.该工具具有聊天室聊天、二人私聊、表情的应用以及请离用户的功能.论文主要对当今聊天软件的发展情况、与该聊天软件相关的各种技术以及该聊天工具的实现做了一个详细的阐述.本聊天室设计初衷是为软件开发人员在局域网中方便交流,减少成本,消除由于交流不同带来的开发成本上升.作为计算机网络的应用之一聊天工具,受到了用户的普遍爱好,它把人们带进了一个虚拟的网络世界,大大的加深了人们之间的联系.它将会作为未来人们通过因特网相互联系和娱乐的主要平台.聊天工具的开发主要用到了网络通信技术、语音的采集、压缩、传输、解压缩以及回放等技术,文件传输技术、windows的多线程技术以及视频的采集、压缩解压缩技术等.本软件基于socket通信,在此基础上,实现点对点聊天、广播聊天、一对多聊天、悄悄话以及表情,可以运行于任何支持tcp/ip协议的机器上.用到了多线程的设计,因此线程之间的同步是一大关键之处.由于系统采用c/s(client/server)结构,客户端与客户端以及客户端与服务器端需要传送一些控制消息,因此系统需要自定义一些消息类型,这是该聊天工具的又一大关键之处.关键词:网络通信;thread;socket;guiabstractfrom actual project application angle embarking, take the computer network principle as the instruction, in the union current network some commonly used technology development this chat room. this software has the chat room to chat, two people private to chat, the expression application as well as kick out users function.the present paper mainly to current chats softwares state of play, with to chat the software related each kind of technology as well as how does this chat room to realize has made a detailed elaboration.the original design intention of this chat room is facilitates the exchange for the software developers in the local area network, reduces the cost, eliminates, because exchanges the development cost rise which brings differently. chat room is one of computer networks applications, which has received users universal hobby. it has taken people into a hypothesized network world,deepening peoples relation. it will the main platform through the internet mutual connection and entertainments in future. the development of chat room mainly to use network service technical, the file transfer technology, the windows and so on technology, pronunciation gathering, compression transmission, solution compression and multi-thread technology as well as video frequency gathering, the compression solution compress technique and so on. this software based on the socket correspondence, based on this, realizes chats, the broadcast to chat, one to many to chat point-to-point, the intimate conversation and the expression, may move in any supports the tcp/ip agreement on the machine. with multi-thread design, therefore between the thread synchronization is place of the big key. because the system uses the c/s (client/server)structure, the client side and the client side as well as the client side and the server end need to transmit some control methods, therefore the system needs from defines some message type, this is another key of this chat room.keyword: network service; thread; socket; gui目录引言1第一章 网络聊天室的概述21.1 系统的开发背景21.2 系统的开发意义21.3 系统的开发目标21.4 系统所用知识概述3第二章系统分析52.1 课题来源52.2 对已有聊天软件的分析62.3 项目开发的主要内容62.4 课题来源72.5 系统方案说明72.6 系统其他要求82.7结构流程8第三章 系统设计与实现133.1 聊天室服务器端设计133.2.聊天室客户端设计17第四章 系统测试194.1 测试目标194.2 测试与结果20结 论23致 谢23参考文献24引言自从上世纪中叶第一台计算机诞生以来,计算机越来越走进人们的生活当中,特别是随着计算机网络的发展,把全世界的人们紧密的联系在一起,大大的扩展了计算机的功能,人们越来越离不开计算机了.如今,作为网络应用之一的聊天工具,越来越受到人们的欢迎和重视.现在已有的聊天软件和聊天工具不胜枚举,流行的主要有qq、icq、msn message,netmeeting,mirc和郎码uc和各种的网页聊天室等.这些软件特别是qq升级很快,其功能是越来越来强大,将代表着聊天软件的发展方向.目前,聊天软件的功能除了最基本的文本聊天,已经可以语音聊天,图像聊天,视频聊天,文件传输等三维聊天,还发展了短信发送,无线聊天,在线游戏等功能,可以预见在不久的将来,聊天软件将成为人们通过因特网相互联系和娱乐的主要平台.目前的聊天软件以web模式为主,但html作为一种样式语言,html技术本身却存在着诸多的缺陷,如它限制了交互式的选择,创建和重复使用交互式组件也比较困难,使用不同的扩充有将导致兼容性问题.尽管在目前的internet上,它充当了数据表示的主要角色.这种不协调在internet发展的初期还没有什么影响,但随着internet上信息量的增多和交互性的加强使html显得越来越难以胜任.以web服务器的传送方式可分为静态页面和动态页面.以html文件的形式传送固定数据称之为静态网页;对用户的请求进行分析,并将结果声称其它代码,利用客户端进行传送.此时,会生成以.cgi、.jsp、.asp等为扩展名的脚本程序文件,这些文件根据服务器脚本的分析结果会有所不同,称之为动态网页.单纯的静态页面已经不能满足发展的需要.因为静态页面是用单纯的html语言组成的,它没有交互性.而为了与上网的用户产生交互的关系,随后便发展出了如javascript、cgi、asp、jsp等各种客户端与服务器端的开发技术.jsp是第三代解决方案,它易于第二代解决方案相结合,创建动态内容,它使与其它各种技术相结合的以网络为基础的应用更容易和更快速的建立起来.这些技术包括:网络服务器,网络浏览器,应用服务器和其他开发工具.该毕业设计课题为基于c/s的应用socket技术的聊天工具的设计与实现,它是在socket通信和文本聊天的基础上来实现一对一、一对多聊天.它要求该聊天软件能够自建服务器,被应用在一个个独立的自治系统中,灵活性很大.第一章 网络聊天室的概述1.1 系统的开发背景一聊天室的发展近年来,随着internet的迅速崛起,互联网已日益成为收集提供信息的最佳渠道并逐步进入传统的流通领域.于是网络聊天室开始流行起来,越来越多的用户通过网络聊天畅谈自己的心扉.网络聊天室作为b2b,b2c(business to customer,即企业对消费者),c2c(customer to customer,即消费者对消费者)聊天室,在其聊天活动全过程中起着举足轻重的作用.本文主要考虑的是如何建设c/s的网络聊天室.网络聊天是一中网上互动平台,通过聊天可以实现语言的交流,信息的传递.在人们日常生活中网络交流越来越显得重要,未来的日子里网络聊天将慢慢的融入人们的生活中.二聊天室的现状目前在国内swing和awt应用最为广泛.swing是java中为图形界面设计专门提供的一个包,它的从在为java的页面设计提供了丰富的资源,近年来swing的运用越来越广泛,很多砖面应用程序都是基于swing实现的.1.2. 系统的开发意义本项目是作为本科的毕业设计课题提出来的,它规模适中,适合于个人开发,能够锻炼同学的学习新知识能力,锻炼同学的编程能力,锻炼同学的软件工程的思维方式.它的具体意义如下:(1)目前,计算机的发展离不开网络这一方向,网络将大大扩展计算机的功能,研究计算机在网络方面的技术以及应用,挖掘计算机的网络潜能,将能够大大提高我们对计算机的本身的认识,同时也能加深对计算机网络的认识.(2) 网络的一大应用就是用于用户之间联络的聊天工具,通过对聊天工具的开发,我们将了解计算机如何通过网络相互通信以及在此相互通信的基础上实现的应用程序级的协议.(3)c/s结构的优势在不依赖于浏览器,可以在任何操作系统中运行.而且客户端也可以进行复杂的业务逻辑.这些都是b/s系统所无法达到的. 1.3. 系统的开发目标现在流行的网络聊天室不仅要有漂亮的页面,更要有严谨的规划,注重每一个细小的环节.这样才能使得在网络聊天时避免不必要错误发生.我们将使用swing、socket等技术来编辑页面,并运用hibernate技术把数据库和swing页面相关联.传统的网络聊天室的设计与实现主要是通过页面之间值的相互传递,而本系统中的设计思想是模拟struts中mvc设计模式,将系统中的全部页面作为一个view层,服务器当作一个control层,客户端一个请求到来是,显示通过服务器的crotrol类,不同的请求访问不同的逻辑返回不同的页面.1.4 系统所用知识概述一. ip协议ip网络中每台主机都有唯一的ip地址,ip地址用户标识网络中的每个主机.ip地址是一个32为的二进制数序列.为了便于在上层应用中方便地表示ip地址,可以把32位的二进制数序列分为4个单元,每个单元占8位,然后用十进制整数来表示每个单元,这些十进制整数的取值范围是0255.如某主机的ip地址可以是192.166.3.4.ip地址由两部分组成:ip网址和ip主机地址.ip网址表示网络的地址,ip主机地址表示网络中的主机的地址.网络掩码用来确定ip地址中哪部分是网址,哪部分是主机地址.二. tcp协议及端口ip协议在发送数据包时,途中会遇到各种事情.例如,可能路由器突然崩溃,使包丢失.又如,一个包可能沿低速链路移动,而另一个包可能沿高速链路移动而超过前面的包,最后使得包的顺序搞乱.tcp协议使两台主机上的进程顺利通信,不必担心包丢失或包顺序搞乱.tcp跟踪包顺序,并且在包顺序搞乱时按正确顺序重组包.如果包丢失,则tcp会请求源主机重发包.三socket与多线程l socket是建立在tcp/ip协议基础之上,可以看作是通信连接两端的收发器,服务器与客户都通过socket来收发数据.除了socket的第一个不带参数的构造方法以外,其他构造方法都会试图建立于服务器的连接,如果连接成功,就返回socket对象;如果因为某些原因连接失败,就会抛出ioexception.当客户请求于服务器程序连接时,可能要等待一段时间.默认情况下,客户会一直等下去,直到连接成功,或者出现异常.如果希望限定等待连接的时间,可以通过connect(socketaddress endpoint,int timeout)方法来设置超时时间,以毫秒为单位.在通信过程中,如果发送方没有关闭socket,就突然终止程序,接收方在接收数据时会抛出socketexception.发送方发送完数据后,应该及时关闭socket或关闭socket的输出流,这样,接收方就能顺利读到输入流的末尾.多线程函数是win 32的一个重要方面,其编程技术较为新颖,在程序设计思路上不同于传统的模块结构化方法,比一般的面向对象的思路也较为复杂,尤其是对于多处理器平台的处理更为复杂.要设计出性能良好的多线程程序,不仅需要对操作系统的处理过程很清楚,还需要对具体应用有一个全面的认识,并对应用中各线程部分的关系非常清楚,对同步模块中的同步对象的具体含义应尽可能地清晰明了,以利于在程序中控制同步事件的发生,避免出现死锁或不能同步处理的现象.线程的创建比较简单,可以利用createthread或者afxbeginthread来实现,终止线程可以用terminatethread来实现.线程只见信息的共享可以利用全局变量来实现或者消息函数来实现.多线程的设计关键之处在于线程之间的同步.socket程序的工作过程:1、建立socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道.2、数据通信:利用虚拟连接通道传送数据信息进行通道.3、关闭:通信结束时,再将所建的虚拟连接拆除.具体如下:服务器1服务器server2监听4接收5读6写7关闭3客户端client6 写5 读7关闭 三次握手:第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认.第三此握手:源端机收到含有两次初始序列号的应答后,在向目的主机发送一个带有两次连接的序列号的确认.具体过程如下ack=1第一次握手,主机a向主机b发送连接请求第二次握手,主机b收到主机a的请求,向主机a回发一个确认,同时向主机a发送一个连接请求第三次握手,主机a收到主机b发送的数据包在向主机b发送一个确认连接主机a 主机back=1,syn=1,seq=aaaaaaaaaasyn=1,seq= 四. java gui为了方便用java构建图形用户界面,sun最初提供了一个在所有平台下具有的独特java外观的图形界面库.sun在applet技术策略方面的首要伙伴netscape提出applets应该维持和运行时平台一样的外观.他们希望applets在某一平台下在显示和行为上能够像其他应用程序一样.为了实现netscape的本地外观的目标,在jdk的第一个发布版中包含了awt这个库.awt的缺省实现使用了对等机制,即每一个javagui窗口部件都在底层的窗口系统中有一个对应的组件.第二章系统分析2.1 课题来源根据当前网络的需求,网络聊天越来越受各种网民所青睐.因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流.而本人也学习过java语言,对网络编程也较有兴趣,为了更好的考验自己对java语言的掌握程度,本人就决定以基于java聊天设计与实现为毕业设计,希望通过这一次的能进一步提高本人的网络开发编程的能力.2.2 对已有聊天软件的分析如今,聊天软件种类繁多,发展迅速.下面简要的对已有的聊天软件作一下总结分析.一. 功能分析作为如今流行的聊天软件之一qq,功能已经非常强大,基本上朝着三个大的方向发展,即个人及时通信,企业实时通信和娱乐资讯.它的功能主要有:(1)个人文本聊天(2)个人语音聊天(3)个人视频聊天(4)图像传输(5)文件传输(6)在线游戏(7)聊天室聊天(8)隐身,上线(9)群聊天(10)企业级实时通信聊天软件的发展方向是三维化,人性化,综合化.二. 网页聊天室作为另一种聊天软件形式,网页聊天室也受到用户的普遍欢迎.网页聊天室的优点就是很好的利用了浏览器的功能,用户不需要安装任何新的软件,即可加入聊天室聊天.现在的网页聊天室除了文本聊天之外,语音聊天也很常见.由于其客户端的简化,其功能必然受到限制.三. 缺陷不管是qq,还是网页聊天室,其最大的缺陷就是服务器固定,用户必须连接上服务器.如果想在一个自治系统之内(一个孤立的网络)通信,netmeeting是一款不错的软件.它服务器有很强的灵活性,任何用户都可以建立自己的服务器.2.3 项目开发的主要内容设计并实现基于socket的文本聊天程序包括广播聊天,二人私聊.涉及的内容包括用户登录,聊天方式的选择,附带表情,以及悄悄话选项.管理员身份可以看到私聊的和内容.由一个管理员运行chatroomserver建立主机服务器,其他用户运行chatroomclient运行客户端,通过服务器的ip和设置的端口号与之建立连接.在服务器端可以显示用户登录的信息,客户端可以看见当前在线用户的人数和昵称.在由于开发目的的原因,所以不采用登录验证模式,只要输入用户昵称即可登录,对恶意刷屏或语言不礼貌者,管理员可以请离该用户.2.4 课题来源根据当前网络的需求,网络聊天越来越受各种网民所青睐.因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流.而本人也学习过java语言,对网络编程也较有兴趣,为了更好的考验自己对java语言的掌握程度,本人就决定以基于java聊天设计与实现为毕业设计,希望通过这一次的能进一步提高本人的网络开发编程的能力.2.5 系统方案说明 网络聊天室涉及的一个服务器端和n个客户端.客户向服务器发送请求,服务器对请求作出响应.客户尝试与服务器建立连接.一旦连接建立起来,客户和服务器就可以通过套节字进行通信.本系统中,主要有两个应用程序,分别为服务器程序和客户端程序.用程序主要用于消息转发、客户登陆信息的管理以及向所有用户发送系统消息等;客户端应用程序主要用于客户聊天记录的显示和信息输入.本系统采用c/s(client/server)体系结构(见图2-1),即客户机/服务器体系结构.其特点是客户端只装载应用软件,而把复杂的消息处理、用户监控等放在服务器端实现,这样就可以大大简化客户端软件.serverclientclientclientclient图2-1 c/s体系结构图其大致实现模型是:(1)服务器分配一个端口号.一旦服务器启动,既使用listenthread线程对端口进行不间断监听.如果客户请求一个连接,服务器使用accept()方法打开一个socket连接.(2)客户在host和port端口建立连接.(3)服务器和客户端使用inputstream和outputstream进行通信.2.6 系统其他要求一. 系统性能要求(1)时间特性对于公共聊天和聊天室聊天,要求响应每条消息的时间不超过1秒钟,否则用户将感到这个聊天工具反应迟钝.对于二人文本私聊,要求响应每条消息的时间不超过500ms,这样使得二人私聊能够有种当面聊天的感觉.(2)灵活性要求该聊天工具能够适用于多种协议上,而且能够在任意个自治系统之内使用,要求服务器自建非常灵活.二.系统环境要求(1)硬件要求:安装了网卡,并连入局域网.(2)软件要求: windows98以上的系统;安装了支持socket通信的tcp/ip或者协议;jdk1.4以上版本.2.7结构流程一. 服务器结构流程图服务器端通过socket()系统调用创建一个socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦listen().如果有客户端连接请求,则在数组中选择一个空socket,将客户端地址赋给这个socket.然后登录成功的客户就可以在服务器上聊天了.服务器启动处于监听状态客户端登录处理 群聊 请求客户端下线服务器退出处理 表情 请求处理 私聊 请求图2-2 服务器结构流程图三.客户端结构流程图客户通过socket(inetaddress,port)建立与服务器的连接.服务器与客户都通过构造objectinputstream,objectoutputstream来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的socket对象.客户端然后向服务器发送消息,比如文件传输等,服务器收到来自客户的请求后,针对不同的消息处理请求. 图2-3 客户端结构流图四.登录结构流程图用户登录,首先要有一个提供用户登录的表单.用户登录的表单应该嵌入整体的结构当中.在实际的应用中,可以这样设计,如果用户没有登录,则在页面中显示用户登录的选项,用户登录后,则可隐藏用户登录的选项而代之以用户的基本信息.首先,用户要有一个用户名和密码.网络聊天需要很高的稳定性和安全性,因此对用户名不允许使用恶意的代码作为用户名.同时对密码也要求保密,将密码加密后再存入数据库.另外,一个网络聊天室.用户的真实姓名是必不可少的.除此之外还需要用户的性别、e-mail、电话号码等 登录入口取得用户名和密码用户保存到usermap中用户是否存在密码是否正确登录成功是是否否 y n y n图2-4登录结构流程图五. 注册结构流程图点击主页面的用户注册选项后,会弹出一个注册信息界面,用户需要如实填写用户名、密码、e_mail、地址、电话、真实姓名等各项信息,提交后,系统进行检测判断该用户名是否已经注册过,如果已经存在则弹出新页面,提示用户该用户名已经注册过,如果没有则进行下一步判断,用户输入的两次密码是否一致,然后依次往后判断用户所填写的各项信息是否符合要求,直到所有信息均正确无误,系统将该用户注册信息写入会员表即user并提示用户注册成功,用户登陆后,就可以客户端聊天了.注册入口用户名有效两次密码一致长度有效email地址有效其他信息有效注册成功y n y ny n y ny n y图2-5注册结构流程图注册入口必选项为空用户名有效?两次输入密码是否一致密码长度符合要求?email地址有效效?其他信息有效注册成功第三章 系统设计与实现网络聊天室涉及的一个服务器端和n个客户端.客户向服务器发送请求,服务器对请求作出响应.客户尝试与服务器建立连接.一旦连接建立起来,客户和服务器就可以通过套节字进行通信.3.1 聊天室服务器端设计服务器端是整个聊天室的主要部分,它包含了客户端接入以及处理其发出请求的一系列方法,是整个聊天是的核心,客户发送的信息也是通过服务器发送到其他用户的.一. 服务器设计思想作为服务器设计,需要考虑以下几点问题:(1)安全性服务器的安全性包括两部分,一是服务器本身软硬件配置上的安全性,比如防止系统漏洞;二是服务器和客户端通讯协议的安全性设计,防止通过协议本身导致服务器被非法攻击等.(2)并发服务能力主要是线程间的锁控制.涉及到锁控制的,主要是因为共享问题.共享分为两种:一是代码共享部分;一是数据共享部分.其中做主要的还是数据共享部分.但是没有什么好的解决办法,唯一的办法就是检查这个共享是不是真正必要的,这些数据可不可以分成两部分以形成不是共享的.(3)性能的可线性提高这主要指服务器的服务能力可以通过增加线程的方式线性提高性能.这就要求服务器的服务能力分担是均衡的,即实现良好的负载平衡.二.服务器端各主要类的定义及其功能serverframe这个类是服务器端程序运行的入口,运用swing图形界面定义了服务器的主界面,其中包含一个主窗体、若干个容器、按钮、输入框和文本显式框.jbinit()方法是使整个图形界面初始化.同时还有startserver()和stopserver()两个方法,当运行startserver()这个方法时就会创建个serversocket对象并设定1001端口号.关闭聊天界面会自动关闭serversocket断开连接。customer:此类为用户节点类,其对象实例用户唯一标识一个用户,只有属性没有方法,并创建了一个自身的引用.connection这个类继承了thread线程类,主要的方法也是重写父类的main()方法.方法中定义了个run()方法一直处于监听状态,直到boolnean类型为false时,也就是服务器关闭是退出.并控制输入输出流来显式上线下线的信息发送到每个客户端.userinfolist:这个类是针对node类也就是定义的用户进行操作,其中有增加用户的add()方法、删除用户的del()方法、指定id或name的两个find()方法以及获所有用户数的getcount()方法.sendmessagetoall:这个类用于向所有客户端发送信息,实现方法是sendmsgtoall,它有两个参数,一个是用户userinfolist,和要发送的消息m.通过输入输出流来控制并通过网络传输的.serverreceivethread:它继承了thread线程类,用于获取客户端发来的信息并作适当的处理,在向客户端发送消息之前对要发的消息进行适当的加工.如客户端发出悄悄话请求时,这个类会调用方法在所发送的消息前加上“悄悄对你说”.三.服务器端用户管理功能的设计与实现 由于客户端承载着与客户端之间和客户端相互之间交流的重要任务,所有对所有用户端进行管理功能的实现很重要.在这个功能中是通过定义node和userinfolist这两个类来实现的当服务器端接到一个客户端的请求时,服务器端就会初始化一个node节点作为客户端,node类中出了有起必须的一些用户名、输入输出流等属性外,还定义了其自身的引用node next,作用是把客户端设计成一个链表,通过next这个属性让他们连接起来,这样做的优点是不需要再定义list或者map来存放客户端结点,只需在node中增加一个属性就能实现,使其性能有很大的提高.userinfolist中定义了对node进行增加、删除、查找和返回其数目的方法,通过node的next属性遍历所有的客户端.在整个的聊天室实现中客户端管理模块起到了基础的支持,无论是发送消息、上线下线和悄悄话都是调用userinfolist中的方法来确定对哪个客户端进行操作的.node对象是存放在内存中的,当serversocket关闭的时候会释放资源,node结点失效.三.服务器端显示消息的功能设计与实现 服务器端作为所有消息的中转站和系统消息发出站,对消下的处理也是相当重要的一个环节,如果失去了消息发送消息的功能,聊天室也就是去了存在的意义.首先在客户node类中定义了两个属性,分别是objectoutputstream和objectinputstream,这是java语言的输入输出流,应用于所有信息的传递,可以输入输出对象、数据、字符串等等.首先serverlistenerthread会捕获到客户端的请求,然后引用chatroom类并调用objectoutputstream方法发送消息.服务器会接收到请求,会对其进行加工,加上所需要的提示信息和用户名,如果是群聊,则调用sendmessage中的sendmsgtoall发送到每一个客户端.期间会调用userinfolist来获取所有用户.客户端获得消息后调用服务器中定义的node类中的outputstream将接收并显示到图形界面中的文本输出框,群聊功能就实现了.如果是私聊,userinfolist会根据用户名查找是哪个用户,再调用sendmessage方法将消息发送到指定客户端.如果是服务器端发送消息则会在发送之前加入“系统消息”后再调用sendmessagetoall方法发送到每个客户端.客户端程序通过输入流获取到信息后进行判断并作相应的处理.在字符串前面加上适当的说明信息之后条用textarea.append()方法将信息输出到主界面上.四.服务器端核心代码 /*创建服务器*/public class appserver extends threadserversocket serversocket;serverframe sframe;static vector u=new vector(1,1);static vector v=new vector(1,1);public appserver() sframe=new serverframe(); try serversocket = new serversocket(1001);/获取服务器的主机名和ip地址inetaddress address = inetaddress.getlocalhost(); sframe.txtservername.settext(address.gethostname(); sframe.txtip.settext(address.gethostaddress(); sframe.txtport.settext(1001);catch(ioexception e)fail(e,不能启动服务!);sframe.txtstatus.settext(已启动.);this.start(); /启动线程public static void fail(exception e,string str)system.out.println(str+ 。+e);/*监听客户的请求*/public void run()trywhile(true)/监听并接受客户的请求socket client = serversocket.accept(); connection con = new connection(client,u,v); /支持多线程catch(ioexception e)fail(e,不能监听!); /*启动服务器*/ public static void main(string args) new appserver(); /*处理线程*/class connection extends threadprotected socket netclient;vector useronline;vector userchat;protected objectinputstream fromclient; /从客户到服务器protected printstream toclient; /传导客户端static vector vlist = new vector();object obj;public connection(socket client,vector u,vector c)netclient = client;useronline=u;userchat=c;try/发生双向通信 /检索客户输入fromclient = new objectinputstream(netclient.getinputstream(); /服务器写到客户toclient = new printstream(netclient.getoutputstream();catch(ioexception e)trynetclient.close();catch(ioexception e1)system.out.println(不能建立流+e1);return;this.start();3.2.聊天室客户端设计 客户端中定义了客户的主界面以及发送消息、接收消息等方法.它继承了thread线程类,因而多个客户端可以并发执行且不受影响.一 客户端设计思想 服务器的作用就是为了满足客户端的要求.客户端作为大众群体,地位也是非常重要,其权限没有服务器高.在客户端的设计中只需加入客户端住界面和接收发送信息的线程以及一些对基本字符串的处理,其他复杂的功能由服务器完成.二 客户端各主要类的定义及其功能chatclient:客户端的主函数就在这个类中.login方法是用于用户登录的,不需要事先注册,用户名不为空即可登录.之外还有logout下线以及发送信息的方法.客户端的主界面的初始化写在jbinit方法中,和服务器端界面类似,它由一个panel和若干个按钮和textarea组成,这些swing组件与服务器端的监听器相连.三 客户端登陆的设计与实现 本程序登录是需要验证的,如果用户不是系统的提示信息或者已存在的用户名则登录成功.登录功能中首先实例化一个socket,传入本机的ip地址和要连接服务器的端口号服务器建立连接,如服务器未开启则抛出异常并在主界面的文本框中显式.然后从socket对象获取输入流,实例化用户线程并启用.四 客户端发送消息的设计与实现发送消息是由sendmessage方法来完成的.该方法首先获得要发送的内容和对象.如果是悄悄化则加上status字符串.然后把提示信息、聊天的对象、聊天方式、表情和聊天内容依次通过输出流发送给服务器端,发送一条清空一次缓存,服务器端会根据接收到的内容作相应的处理.五 客户端显示收到消息的设计与实现 在接收消息模块中定义了一个while循化,只要用户没有下线或与服务器的连接没有断开则消息一直处于接收状态.当输入流读取到服务器发送的消息后用if条件语句判断是何种类型的信息,并对其做加上相应的类型提示信息的处理.最后送交主界面的textarea进行显示.六 客户端核心代码 public void register()/接受客户的详细资料 register_customer data=new register_customer(); data.custname = txtusername.gettext();data.custpassword = pwduserpassword.gettext();data.age = txtage.gettext();data.sex = rbtnmale.isselected()?男:女;data.email = txtemail.gettext();/验证用户名是否为空if(data.custname.length()=0) joptionpane.showmessagedialog(null,用户名不能为空); return;/验证密码是否为空if(data.custpassword.length()=0) joptionpane.showmessagedialog(null,密码不能为空); return;/验证密码的一致性if(!data.custpassword.equals(pwdconfirmpass.gettext() joptionpane.showmessagedialog(null,密码两次输入不一致,请重新输入); return;if(data.age.length()=0) joptionpane.showmessagedialog(null,年龄不能为空); return;int age=integer.parseint(txtage.gettext();if (age100)joptionpane.showmessagedialog(null,年龄输入不合法);return;int found_flag=0; for (int i=0;idata.email.length();i+) if(data.email.charat(i)=) found_flag+; if(found_flag!=1) joptionpane.showmessagedialog(null,电子邮箱格式不正确,请重新输入); return;try /连接到服务器 socket toserver = new socket(strserverip,1001); objectoutputstream stre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 醋酸装置操作工5S管理考核试卷及答案
- 淡水鱼类繁育工协作考核试卷及答案
- 医药基础考试试题及答案
- 印染丝光工适应性考核试卷及答案
- 2025年护士资格认证考试试题及答案
- 2025年儿歌钢琴弹唱真题及答案
- 材料加工基础题库及答案
- 农发行锦州市黑山县2025秋招笔试性格测试题专练及答案
- 混凝土工入职考核试卷及答案
- 泥瓦作文物修复师技能操作考核试卷及答案
- 透明土实验技术的研究进展
- 戴海崎心理与教育测量第4版课后习题答案
- 设备保管协议
- 中石油职称英语通用教材
- 某火电厂输煤系统土建工程监理细则
- 室外消防钢丝网骨架塑料复合PE管施工及方案
- 超声引导下坐骨神经阻滞
- 焊接质量手册
- GB/T 29049-2012整樘门垂直荷载试验
- 【上课用】 高三数学一轮复习-错位相减法课件
- 《放飞烦恼-拥抱快乐-》-心理健康p课件
评论
0/150
提交评论