版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
企业QQ系统开发
天目学院工程技术081袁立东指导教师:胡建华摘要:随着Internet应用越来越丰富实用计算机的人增多,以简便、快速为代表的即使通讯工具也层出不穷,同时,也成为当今网络应用的主流。聊天工具作为当今最广泛的即时通讯工具之一,这种在线聊天工具也被广大用户所接受,比如,具有代表性的腾讯公司---QQ聊天软件。本毕业设计就是基于.NET开发环境下,使用SQL.Server2005数据库、C#编程语言开发的一个在线聊天,图片发送,文件传递,视频连接等功能的聊天工具。本文首先介绍国内外聊天工具的发展;之后对开发环境和语言进行简单介绍;对本毕业设计所要开发的聊天软件做较为详细的需求分析,并给出聊天软件的系统设计方案;本毕业设计主要实现聊天软件的部分功能,在线聊天,文件传递,视频连接等功能的类库模块,和服务器端监控用户模块;与设计的客户端模块构成一个使用、功能完善的QQ聊天软件;通过运行、测试与分析来说明该即时聊天软件的稳定、可靠具有一定的使用价值。关键词:聊天软件;QQ聊天软件;SQL在线聊天EnterpriseQQsystemdevelopmentAbstract:withthedevelopmentofInternetapplicationsbecomemoreandmoreabundantpracticalcomputerhasincreased,withsimple,fasttorepresentevenifthecommunicationtoolalsoemergeinanendlessstream,atthesametime,alsohasbecomethemainstreamofnetworkapplication.Chattoolsasthemostextensiveinstantcommunicationtools,thisonlinechattoolshavealsobeenacceptedbythemajorityofusers,forexample,isrepresentativeoftheTencentcompany---QQchatsoftware.ThisgraduationdesignisbasedonNETdevelopmentenvironment,usingSQL.Server2005database,C#programminglanguagetodevelopanonlinechat,email,filetransfer,videoconnectionfeaturessuchaschattools.Thisarticlefirstintroducedathomeandabroadchattooldevelopment;afterthedevelopmentenvironmentandlanguagewereintroducedbriefly;thegraduationdesigntothedevelopmentofthechatsoftwaretododetailedneedsanalysis,andgivesthechatsoftwaresystemdesign;themainchatsoftwarefunction,onlinechat,filetransfer,videoconnectionfunctionclassmodule,andservermonitoringusermodule;andthedesignoftheclientmoduleconsistsofause,improvethefunctionoftheQQchatsoftware;byrunning,testingandanalysistoillustratetherealtimechatsoftwarestability,reliabilityhasacertainvalue.Keywords:chatsoftware,chatsoftware,QQSQLonlinechat引言Internet是目前世界上最大的计算机互联网络,它遍布全球,将世界各地各种规模的网络连接成一个整体,它的覆盖面积的庞大使世界从此变小,人们的信息交流也变得简单与方便。如今,人们可以通过即时聊天软件进行实时的沟通,从即时性、有效性和经济性上都超过了信件、E-Mail和电话。自从1996年11月ICQ在全球发布,拉开了互联IM(InstantMessenger,即时通讯)应用的序幕。ICQ一经上市,迅速取得了广阔的市场,作为世界IM的鼻祖,很有意思的说,ICQ是“Iseekyou”的简称,是以色列两个工程师开发的,由于它的前景一片光明,所以同类软件迅速的更进。因为其本身的技术并不复杂,所以很快几乎每个国家都退出本土的IM软件,抢夺了市场。以国内的腾讯QQ软件为例:腾讯QQ脱胎于腾讯OICQ,而OICQ就是国内最早出现的即时通讯软件之一,软件最初的设计完全仿照ICQ,从内容、形式等方面完全照搬。出于国内首创,所以很快积累了大量的人气,用的人越来越多,最终占领了国内70%以上的市场。其它还有微软的MSN、雅虎的雅虎通、网易泡泡、盛大圈圈、淘宝旺旺、skip等。随着IM软件的深入研究,它的功能早已超出了初期的即时文字聊天。以腾讯QQ为例,我们通过QQ和好友进行交流的同时,可以自定义图片发送和接收、语音视频面对面聊天、点对点\断点续传的文件传输等。事实表明,现在的IM是一个交流互动、休闲娱乐、语音、视频、音乐播放、信息共享等高级功能层出不穷的即时聊天软件。发展至今,IM软件已经成为现代人和现代经济中不可缺少的一部分。它的出现给人们一个彼此之间的沟通带来了方便、人们可以通过聊天软件建立深刻的友情,让人们在Internet上的交流带来生机与活力。近年来,类似于QQ的局域网即时聊天工具得到了飞速发展。不管是在哪个行业里的运用,它都能发挥其卓越的通讯功能,为企业带来了不可估计的成本节约,其中最突出的当然是沟通成本,作为现代化企业,拥有适合自己的沟通方式,从而提高整体效率。企业QQ系统开发一:开发工具简介二:开发企业QQ系统的分析三:企业QQ系统设计四:类库的设计五:客户端QQ模块设计六:服务器端模块设计七:结论开发工具简介1.1VisualStudio1.2C#语言1.3SQLServer20051.4C/S结构1.5UDP协议1.6SocketVisualStudioVisualStudio是一套完整的开发工具集,用于生成ASP.NETWeb应用程序、XMLWebServices、桌面应用程序和移动应用程序。VisualBasic、VisualC++、VisualC#、VisualJ#全都是用相同的集成开发环境(IDE),利用此IDE可以功效工具且有助于创建混合语言解决方案。VisualStudio的安装对于电脑的体系结构、操作系统、硬件都有要求。VisualStudio内有应用程序、Web窗体、Windows窗体、XMLWebservices、XML支持。VisualStudio目前已经开发到9.0版本,也就是VisualStudio2008。C#语言C#(CSharp)是微软为.NETFramework量身订做的程序语言,C#拥有C/C++的强大功能以及VisualBasic简易使用的特点,是第一个组件向导的程序语言,和C++与Java一样亦为对象向导程序语言。C#独有的特点有:简洁的语法精心的面对对象设计与Web的紧密结合完整的安全性与错误处理版本处理技术灵活性与兼容性SQLServer2005SQLServer2005数据库管理重要特点数据库镜像:通过新数据库镜像方法,将记录档案传送性能进行延伸。在线恢复:使用SQL2005版服务器,数据库管理人员将可以在SQL服务器运行的情况下,执行恢复操作。在线检索操作:在线检索选项可以在指数数据定义语言(DDL)执行期间,允许对基底表格、或集簇索引数据和任何有关的检索,进行同步修正。快速恢复:新的、速度更快的恢复选项可以改进SQL服务器数据库的可用性。安全性能的提高:SQLServer2005包括了一些在安全性能上的改进,例如数据库加密、设置安全默认值、增强密码政策、缜密的许可控制、以及一个增强型的安全模式。新的SQLServerManagementStudio:SQLServer2005引入了SQLServerManagementStudio,这是一个新型的统一的管理工具组。这个工具组将包括一些新的功能,以开发、配置SQLServer数据库,发现并修理其中的故障,同时这个工具组还对从前的功能进行了一些改进。专门的管理员连接:SQLServer2005将引进一个专门的管理员连接,即使在一个服务器被锁住,或者因为其他原因不能使用的时候,管理员可以通过这个连接,接通这个正在运行的服务器。快照隔离:我们将在数据库层面上提供一个新的快照隔离(SI)标准。数据分割:数据分割将加强本地表检索分割,这使得大型表和索引可以得到高效的管理。增强赋值功能:对于分布式数据库而言,SQLServer2005提供了全面的方案修改(DDL)复制、下一代监控性能、从甲骨文(Oracle)到SQLServer的内置复制功能、对多个超文本传输协议(http)进行合并复制,以及就合并复制的可升级性和运行,进行了重大的改良。C/S结构C/S结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到client端和server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是client/server形式的两层结构,由于现在的软件应用系统正向分布式的Web应用发展,Web和client/server应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序UDP协议UDP协议的全称是用户数据报协议,在网络中它与TCP协议一样用于处理。数据包。在OSI模型中,在第四层——传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。与所熟知的TCP协议一样,UDP协议直接位于IP协议的顶层。根据OSI参考模型,UDP和TCP都属于传输层协议。Socket
Socket用于在两个基于TCP/IP协议的应用程序之间相互通信。最早出现在UNIX系统中,是UNIX系统主要的信息传递方式。在windows系统中,socket称为Winsock。两个基本概念:客户方和服务方。当两个应用之间需要采用SOCKET通信时,首先需要在两个应用之间(可能位于同一台机器,也可能位于不同的机器)建立SOCKET连接,发起呼叫连接请求的一方为客户方,接受呼叫连接请求的一方成为服务方。客户方和服务方是相对的,同一个应用可以是客户方,也可以是服务方。在客户方呼叫连接请求之前,它必须知道服务方在哪里。所以需要知道服务方所在机器的IP地址或机器名称,如果客户方和服务方事前有一个约定就好了,这个约定就是PORT(端口号)。也就是说,客户方可以通过服务方所在机器的IP地址或机器名称和端口号唯一的确定方式来呼叫服务方。在客户方呼叫之前,服务方必须处于侦听状态,侦听是否有客户要求建立连接。一旦接到连接请求,服务方可以根据情况建立或拒绝连接。连接方式有两种,同步方式(Blocking)和(noBlocking).客户方发送的消息可以是文本,也可以是二进制信息流。当客户方的消息到达服务方端口时,会自动触发一个事件(event),服务方只要接管该事件,就可以接受来自客户方的消息了。开发企业QQ系统的分析2.1开发企业QQ系统的背景2.2开发企业QQ系统的可行性2.3企业QQ系统的功能需求2.4企业QQ系统的性能需求2.5企业QQ系统的运行环境
开发企业QQ系统的背景
在一些中小型企业或是学校中,为了便于职工之间的交流,信息的传递,局域网企业QQ系统的开发就显得非常重要。可以根据企业的内部结构,开发一个符合本企业工作流程的QQ系统,企业QQ可以帮助企业快速搭建内部即时通讯系统,大幅度提高企业的工作效率,使上级与下级之间的交流更方便。开发企业QQ系统的可行性因为本设计利用SQLServer2005数据库,它使用与大中规模的数据量的需求,基于.NET开发环境,只要电脑能安装VisualStudio就能运行本毕业设计。企业QQ系统的功能需求本系统通过客户端、服务器端来实现聊天系统的基本功能。客户端:用户注册界面;用户登录界面;用户发送、接收消息界面等。服务器端:处理用户注册;处理用户登录;处理用户退出等。企业QQ系统的性能需求随着中小型企业的不断发展,在企业内部实现局域网通信时必不可少的。企业QQ系统就是一个非常好的局域网通信软件,他可以进行在线聊天、图片发送、文件传递、视频连接,还可以随时在网络中进行多人对话或网络会议。这样,可以大大提高企业的工作效率,适于企业内部职工的交流。企业QQ系统的运行环境系统开发平台:MicrosoftVisualStudio2005系统开发语言:C#数据库管理系统软件:MicrosoftSQLServer2000系统运行平台:WindowsXP(SP2)/Windows2000(SP4)/WindowsWerner2003(SP1)系统运行环境:Microsoft.NETFrameworkSDKv2.0分辨率:最佳效果1024×768像素。企业QQ系统设计3.1企业QQ系统目标3.2企业QQ系统功能结构3.3企业QQ系统业务流程3.4数据库的设计企业QQ系统目标(1)操作简单方便,界面简洁美观。(2)每个客户端只能注册一次。(3)可以在局域网中实现文字及大图片的传输。(4)可以实现局域网视频。(5)可以实现多用户的信息通讯信。(6)系统运行稳定、安全可靠。企业QQ系统功能结构根据企业QQ系统的特点,可以将其分为客户端和服务器端两个部分进行设计。客户端主要运用与注册、登录和信息的发送等;服务器端主要用于显示在线人员的状态,以及向远程客户端发送信息的一个中转站。企业QQ系统业务流程数据库的设计3.4.1数据库分析企业QQ系统的服务器端主要记录注册人员的信息,也就是可以在数据库中记录所有人员的聊天信息,本系统使用microsofeSQL.server2005作为后台数据库。数据库名名为db_myQQdata,其中包含了一张数据表,用于存档当前的人员信息,以及在线人员的状态等。3.4.2数据库概念设计在QQ用户登录时,为了可以在服务器端返回所有注册用户的信息,可以在服务器端的数据库中创建一个用户注册表,用于记录注册用户的IP地址、在线状态、用户名和密码等。用户注册表的实体E-R图如下:类库的设计4.1类库定义4.2类库的创建说明类库定义
NETFramework类库是一个由Microsoft.NETFrameworkSDK中包含的类、接口和值类型组成的库。该库提供对系统功能的访问,是建立.NETframework应用程序、组件和控件的基础。类库的创建说明4.2.1ClassPublic类4.2.2UDPSocket控件4.2.3ClassForms类4.2.5ClassOptionData类ExSQL()方法ExSQLReDr()方法4.2.6ClassSerializers类SerializeBinary()方法DeSerializeBinary()方法4.2.7ClassUserInfo类4.2.8ClassUsers类
4.2.9ClassVideo类在开发企业QQ系统时,为了便于客户端与服务器端的信息通信,可以将UDP协议封装成一个空间,或是将局域网中发送或接受信息的功能封装成类。为了便于客户端和服务器端的调用,可以将UDP控件和自定义类存储在MyQQClass类库中。ClassPublic类
该类用于记录服务器端和客户端的基本信息,并通过自定义方法Myosin()获取服务器端的所有IP地址,通过自定义方法Getwindows()获取Windows目录。代码如下UDPSocket控件
UDPSocket控件将UDP协议中的IP地址和端口号以控件属性的形式进行设置,并自定义了一个DataArrival事件,用于对主机的端口号进行监听,以获取远程计算机发送的消息。主要代码如下:UDPSocket()和UDPSocket()方法是创建控件时自动生成的,UDPSocket()方法是发是对编程者自定义命令的生成器;UDPSocket()方法是将自定义命令添加到空间中。代码如下:OpenSocket()和CloseSocket()方法用于打开和关闭UDP协议端口号的监听功能,并在监听关闭后,关闭用于接收消息的子线程。代码如下:Listener()方法用于实现主机端口号的监听功能,主要是在线程打开时,将DetUDPData()方法所接收的消息传递给线程的委托。代码如下:GetUDPData()方法是在获取远程消息时,将消息转发给UDPSocket控件的DataArrival事件,可以通过该事件将消息发送给远程客户端。代码如下:Send()方法用于将主机获取的消息,通过IP地址和端口号发送给远程客户端。代码如下:ClassForms类
该类将获取的窗体在InnerList列表中进行添加和移除的操作,并可以通过制定的索引号,在列表中查找相应的窗体。
ClassMsg类
该类主要是用枚举型的元素值指定消息发送的命令、消息类型、消息发送的状态等,并用[Serializable]对类进行序列化,当类序列化后,序列化引擎将跟踪所有已序列化的引用对象,以确保对象不被序列化太多次。代码如下:ClassOptionData类
该类将服务器端对数据库的操作进行了封装,通过对该类中各方法的调用,可以对数据表进行添加,修改及读取的操作。ExSQL()方法该方法通过ConStr参数所传递的SQL语句,对指定数据表进行查询,并将记录个数进行返回。代码如下:ExSQLReDr()方法该方法通过ConStr参数所传递的SQL语句,对指定数据表进行查询,并将查找到的数据信息以SqlDataReader对象进行返回。代码如下:ClassSerializers类
该类主要是用SerializeBinary()和DeSerializeBinary()方法,在客户端发送或接收信息时,将对象序列化成二进制流。SerializeBinary()方法该方法是在客户端发送信息时,将发送的对象序列化成二进制流,并返回序列化后的二进制流,因为Socket只能以二进制流的形式进行传输。代码如下:DeSerializeBinary()方法该方法是在客户端接收信息时,将二进制流反序列化为对象,并返回反序列化后的对象,这样,便于在指定的控件上显示接收的信息。代码如下:图一图二ClassUserInfo类
该类用于记录当前QQ用户的编号、IP地址、端口号、用户名称和用户状态,并对该类进行序列化。代码如下:ClassUsers类
该类主要是将服务器端所有注册的用户信息存储到base类的InnerList列表中。这样,当用户注册或登录时,可以将该列表中的信息群发给当前在线的所有用户,以改变QQ窗体中的显示状况。代码如下:ClassVideo类
该类主要是通过视频API函数,打开已安装的视频设备,并将视频所拍摄的照片保存到指定的路径上。代码如下:客户端QQ模块设计
5.1客户端QQ模块概述5.2客户端QQ模块流程图5.3客户端QQ功能模块的测试客户端QQ模块概述QQ模块主要显示当前已注册的所有用户名称,并根据用户的在线情况,设置用户名称的图标样式。客户端QQ模块流程图客户端:客户端也需要创建一个线程来接收,流程图如下:说明:1.与服务器不同,客户端的初始化需要有服务器的IP和对应程序的端口号。同样也不能硬码到程序中,需要放到配置文件中。2.为了能够同时收发数据,客户端也需要重新创建一个线程。该线程的关闭需要主线程来调用子线程关闭程序来关闭。新创建的线程响应程序与服务器端的服务程序类似,不同的是客户端与服务器连接后要接收服务器端发来的所有在线用户列表,初始化其好友。如下图:说明:该线程的需要注意的地方是,线程的销毁是由创建该线程的父线程发出命令来销毁的。客户端运行时先进入登录界面如下图所示,在登录界面我们可以直接登录以前注册好的帐号,也可以点击“注册”按钮进入注册界面来注册新的用户。说明:该界面是客户端运行的第一个界面,用户可以直接登录,将信息发送到服务器端验证,若输入不合法、数据库中没有该用户或密码错误等,会弹出一个提示窗口进行提示。注册界面如下图所示说明:注册界面中用户需要输入基本信息,但性别在该系统中不是关键信息,可不予填写。当用户登录后我们就进入了聊天聊天程序的主界面,如下图所示,此时我们就可以和所有在线用户群聊天,也可以右击某个用户选择和其私聊说明:1.这是该系统的主界面,登录到这个界面后,用户即可与其它用户进行聊天,同时其它用户也会接到该用户上线的通知。同样,某个用户下线的时候,服务器也会将信息发给其它用户,做到了人性化的一面。2.该界面右面的树形用户列表,我们可以右击用户名查看用户信息,也可以屏蔽该用户的发言在本地的显示。3.该部分还加入了其它组件,如字体设置、表情等,但由于种种原因,目前程序上还没实现其功能。在主界面中我们还可以点击用户名来修改自己的信息和密码如下图所示说明:通过该界面用户可以查看或修改自己的信息。服务器端模块设计
6.1服务器端控制台窗体6.2服务器端控制台窗体实现过程服务器端控制台窗体该窗体时客户端与远程客户端相互通信的一个中转站,并且在该窗体上显示已注册的所有用户信息。服务器端控制台窗体如下图所示服务器端控制台窗体实现过程服务器端模块要使用数据表:dbo_Users。(1)新建一个windows窗体,主要用于实现系统的登录功能,该窗体用到的主要控件为:(2)在控制台窗体的菜单栏中选择“控制台/开始服务”命令,打开UDP协议的监听。代码如下:(3)在UDPSocket1控件的DataArrival事件中,对客户端发送的消息进行监听,并根据发送的消息对数据库进行相应的操作。代码如下(4)RegisterUser()方法将客户端注册的信息添加到数据库中,并更新用户列表。代码如下(5)InsertUser()方法的主要功能是将用户注册的相关信息添加到数据库的Users数据表中,并更新用户列表。代码如下:(6)UpdateUserList()方法的主要功能是将刚刚注册成功的用户信息,发送给当前所有在线的用户,以告知其他用户,当前已有人注册。代码如下:(7)UserLogin()方法的主要功能是当用户上线时,更改Users数据表中相关用户的标识,并更新用户的在线状态。代码如下:参考文献
C#从入门到精通(第2版)王小科,徐薇等编著/2010年07月/清华大学出版社C#项目开发案例全程实录
王小科,王军,赵会东等编著/2011年01月/清华大学出版社21天学通SQLServer
秦婧,刘存勇编著/2011年10月/电子工业出版社软件工程基础与实训教程杜文洁,白萍主编/2010年09月/电子工业出版社ProfessionalC#2008ChristianNagel,BillEvjen,JayGlynn,MorganSkinner,KarliWatsonJAVA技术聊天室系统中的开发与应用,电脑学习,白雪,陈广山2005,23(1):15~16基于JavaSocket多客户端并发通信聊天程序的设计与实现,电脑知识与技术,莫足琴,欧阳艳阶,马康2007,31(4):253~255Java实用程序设计100例.袁海燕,王文涛北京:人民邮电出版社,2005:226~229.基于JavaSocket网络编程的一种新实现.电脑开发与应用,陈更力,张青2006(6):13.Web程序设计[M].贾华丁北京:高等教育出版社,2005:6~30.本人编写的QQ系统代码
importjava.awt.BorderLayout;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;import.Socket;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;importjavax.swing.JTextField;publicclassChatClientFrameextendsJFrame{privateJTextAreatextArea=newJTextArea();privateJScrollPanescroll=newJScrollPane(textArea);privateJTextFieldtextField=newJTextField();privateJButtonbtn=newJButton("发送");privateJPanelpanel=newJPanel();privateSocketsocket;
publicChatClientFrame()throwsException{add(scroll);panel.setLayout(newBorderLayout());panel.add(textField);panel.add(btn,BorderLayout.EAST);add(panel,BorderLayout.SOUTH);setSize(200,300);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Strings=JOptionPane.showInputDialog("请输入ip:port");String[]arr=s.split(":");socket=newSocket(arr[0],Integer.parseInt(arr[1]));finalSocketHandlerh=newSocketHandler(socket);newThread(h).start();btn.addActionListener(newActionListener(){publicvoidactionPerformed(ActionEvente){Strings=textField.getText();if(null!=s&&!"".equals(s)){h.send(s);textField.setText("");}}});classSocketHandlerimplementsRunnable{privateSocketsocket;privateBufferedReaderin;privatePrintWriterout;publicSocketHandler(Socketsocket)throwsException{this.socket=socket;this.in=newBufferedReader(newInputStreamReader(socket.getInputStream()));this.out=newPrintWriter(newOutputStreamWriter(socket.getOutputStream()));}publicvoidsend(Strings){out.println(s);out.flush();}publicvoidrun(){try{Stringline;while((line=in.readLine())!=null){textArea.append(line);
textArea.append("\n");}}catch(Exceptione){}textArea.append("已经与服务器断开连接");textArea.append("\n");}}
publicstaticvoidmain(String[]args)throwsException{newChatClientFrame().setVisible(true);}}importjava.io.BufferedReader;importjava.io.InputStreamReader;importjava.io.OutputStreamWriter;importjava.io.PrintWriter;import.ServerSocket;import.Socket;importjava.util.ArrayList;importjava.util.List;importjava.util.concurrent.ExecutorService;importjava.util.concurrent.Executors;publicclassChatServer{privateServerSocketss;privateList<SocketHandler>clientList=newArrayList<SocketHandler>();privateExecutorServicepool=Executors.newCachedThreadPool();
publicChatServer(intport)throwsException{ss=newServerSocket(port);Runnabler=newRunnable(){publicvoidrun(){try{while(true){Sockets=ss.accept();SocketHandlerh=newSocketHandler(s);pool.execute(h);//在线程内执行接收数据
clientList.add(h);}}catch(Exceptione){System.out.println("服务器已经停止");}}};pool.execute(r);//在线程内执行accept
}
classSocketHandlerimplementsRunnable{Sockets;BufferedReaderin;PrintWriterout;publicSocket
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论