毕业设计(论文)- 基于java的网络聊天室--服务器端.doc_第1页
毕业设计(论文)- 基于java的网络聊天室--服务器端.doc_第2页
毕业设计(论文)- 基于java的网络聊天室--服务器端.doc_第3页
毕业设计(论文)- 基于java的网络聊天室--服务器端.doc_第4页
毕业设计(论文)- 基于java的网络聊天室--服务器端.doc_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

河北农业大学 本科毕业论文(设计)题 目: 基于java的网络聊天室 -服务器端 学 院: 信息科学与技术学院 专业班级: 软件工程0902班 学 号 2013 年 6 月 1 日目录1 绪论21.1背景及意义11.2研究现状12 系统分析32.1 实现技术32.2系统分析63系统设计73.1系统功能结构73.2系统业务流程83.3系统实现原理83.模块化设计93. 数据库设计93.开发环境与运行环境103.7客户端结构103.8服务器端结构114 系统实现114.1新用户注册模块114.2 登录模块134.3消息通信模块:与显示的在线好友间通信154.4 服务器端175总结22参考文献23致谢2323 1 绪论1.1背景及意义网络通信在当今信息社会中起着不可或缺的作用,人们可以利用网络通信技术进行即时的信息交流。比如QQ聊天工具,它就是利用网络通信技术开发的一款众所周知的网络聊天工具。目前,信息交流是互联网提供的主要内容,网络通信系统有多重实现方式,类似ICQ属于一种点对点的聊天系统;还有一种是基于Socket的集中式聊天系统,这种聊天系统需要登录统一的聊天服务器。当今主流的聊天工具有QQ,ICQ , MSN Message 等,国内最热门的当属QQ,腾讯 QQ是由深圳市腾讯计算机系统公司开发的,基于Internet的即时寻呼软件。您可以使用QQ和好友用户进行交流、信息即时发送、即时回复、收发即时,功能全面。QQ支持显示朋友在线信息、即时传送信息、即时交谈、即时发送文件和网址。 网络聊天以成为上网族的一种普遍的休闲方式,可以毫不夸张的说,全国的网民中没人不知道QQ聊天软件,所以,一款好的即时通信聊天软件成了上网的必备工具之一。网上有很多的聊天软件可供网民们选择,各有不同的特点和长处,可满足不同人的各种需求。局域网聊天工具,是在局域网内部使用的,用户之间用来交流的一个工具,一般都具有文本聊天和文件传输功能。局域网聊天软件因其使用简单,系统资源消耗少等优点,成为各企事业单位等的局域网内广泛应用的软件之一。1.2研究现状目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC等,国外有著名的MSN等。本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。腾讯的成功与其对QQ的不断创新和完善是分不开的。参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节。可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。其模型如图1.1:图1.1 腾讯QQ服务器-客户端模型与腾讯QQ不同,微软的MSN Messenger只使用了TCP作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的TCP连接进行中转通信。其模型如图1.2:图1.2 MSN服务器-客户端模型腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服务器的处理压力,但其内部协议和实现复杂度都较高。而MSN Messenger所有数据都要经过服务器,服务器压力可想而知(难怪平时很少见到使用MSN进行语音视频聊天的)。2 系统分析2.1 实现技术2.1.1 Java 语言Java,是一种可以撰写跨平台应用软件的面向对象的程序设计语言,由Sun公司的詹姆斯高斯林(James Gosling)等人于1990年代初开发。它最初被命名为Oak,目标设置在家用电器等小型系统的编程语言,来解决诸如电视机、电话、闹钟、烤面包机等家用电器的控制和通讯问题。由于这些智能化家电的市场需求没有预期的高,Sun放弃了该项计划。就在Oak几近失败之时,随着互联网的发展,Sun看到了Oak在计算机网络上的广阔应用前景,于是改造了Oak,在1995年5月以“Java”的名称正式发布了。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。Java编程语言的风格十分接近C+语言,Java继承了C+ 语言面向对象技术的内核,舍弃了C+语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)、多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间。在Java SE 1.5版本中Java又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装拆箱等语言特性。Java不同于一般的编译运行计算机语言和解释执行计算机语言。它首先将源代码编译成字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码,从而实现了“一次编译、到处执行”的跨平台特性。不过,这同时也在一定程度上降低了Java程序的运行效率。但在J2SE1.4.2发布后,Java的运行速度有了大幅提升。与传统程序不同Sun公司在推出Java之际就将其作为一种开放的技术。全球数以万计的Java开发公司被要求所设计的Java软件必须相互兼容。“Java语言靠群体的力量而非公司的力量”是Sun公司的口号之一,并获得了广大软件开发商的认同。这与微软公司所倡导的注重精英和封闭式的模式完全不同。Sun公司对Java编程语言的解释是:Java编程语言是个简单、面向对象、分布式、解释性、健壮、安全与系统无关、可移植、高性能、多线程和动态的语言。Java语言有以下特点:简单(Simple):指的是去除了C/C+中较少使用或可能不安全的功能,例如指标,运算子重载,多重继承等。 物件导向的(Object-oriented):利用OOP的三种基本特性:PIE(多型,继承,封装),来设计出可重複使用的元件,使系统有弹性易于维护。 网路的(Network-Savvy):提供容易使用的API来撰写网路程式 。直译式的(Interpreted):bytecode在JVM上执行时,JIT负责转换为机器码。 稳健的(Robust):捨弃了对记忆体的指标运作。 安全性(Secure):资源回收处理 (Garbage Collection)由JVM自行作记忆体管理,例外处理 (Exception) 可预防突发错误的产生。 结构中立(Architecture Neutral):程式执行在虚拟机器上。 可携的(Portable): Write once, run anywhere指的是由JVM与不同的作业系统沟通。 高效率的(High Performance):利用HotSpot, JIT技术改善效能。 多执行绪的(Multithreaded):Java程序可发出多隻并行的轻量化行程。 动态的(Dynamic):Java程式执行时动态的连结类别库。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。2.1.2 Java与Internet Java语言取得成功的领域之一就是网络(其他语言)数页代码-(Java)一条语句。TCP/IP(传输控制协议/网间协议)是internet的主要协议,定义了计算机和外设进行通信所使用的规则(应用层,传输层,网络层,链路层)。大多数基于internet的应用程序被看作TCP/IP协议的上一层, 如 : ftp, http, smtp, pop3, telnet, nntp等。 IP地址:TCP/IP网络中的每台计算机都有唯一的地址-IP地址。在Java中,有一个用来存储internet地址的类叫InterAddress。Java提供的网络功能有三大类: URL,Socket,Datagram。1、URL是三大功能中最高级的一种,通过URL Java程序可以直接送出或读入网络上的数据。2、Socket是传统网络程序最常用的方式,可以想象为两个不同的程序通过网络的通信信道。3、Datagram是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上。2.1.3 Socket编程1)TCP/IP协议TP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写,TCP/IP是当今网络互联的核心协议。TCP/IP协议是聊天工具在建立连接下使用的协议,该协议是网络中使用的通讯协议,包括传输控制协议和网际协议,TCP/IP协议是网络互连的标准协议,可使不同环境下不同节点之间彼此通信,是连入互联网的所有计算机在网络上进行各种信息交换和传输所必须采用的协议。2)TCP/IP协议进行传输数据传输的过程应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP数据包封装在IP包内,通过网络送给目的TCP。接收方TCP在接收到数据后通知上层应用程序,TCP将保证接收数据的正确性。在实现TCP的主机上,TCP可以被看成是一个模块,和文件系统区别不大,TCP 也可以调用一些操作系统的功能,TCP不直接和网络打交道,控制网络的任务由专门的设备驱动模块完成。TCP只是调用IP接口,向TCP提供所有TCP需要的服务。3)端口号有的时候,一个ip地址不能完整的标识一台服务器,这是应为一台物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是端口。端口实际是一个16位长的地址,它的范围是065535之间,其中01023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都知道的,102465535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的各个客户端应用程序。在数据传输过程中,各种服务器不断的检测分配给它的端口,一边发现要求和它通信的客户端。4)Socket通信机制Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点称为套接字,套接字是在比较低的层次上通信的。Socket所完成的通信时一种基于连接的通信,即在通信开始之前先由通信双方确认身份并建立一条专用的虚拟连接通道,然后他们通过这条通道传送数据信息进行通信,当通讯结束时再将原先所建立的连接断开。Socket程序的工作过程:1、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。2、数据通信:利用虚拟连接通道传送数据信息。3、关闭:通信结束时,再将所建的虚拟连接断开。三次握手:第一次握手:原主机发送一个带有本次连接的序号的连接请求。第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,再向目的主机发送一个带有两次连接的序列号的确认。具体过程如下:主机A 主机BACK=1,SYN=1,SEQ=aaaaaaaaaaACK=1第一次握手,主机A向主机B发送连接请求第二次握手,主机B收到主机A的请求,向主机A回发一个确认,同时向主机A发送一个连接请求第三次握手,主机A收到主机B发送的数据包在向主机B发送一个确认连接SYN=1,SEQ= 图2.1 三次握手图2.2系统分析2.2.1可行性分析经济可行性:开发此网络通讯系统所需的硬件和软件环境(Myeclipse 开发工具;数据库SQL Server),可以从相关网站免费下载。操作可行性:此通信系统具备友好的用户界面,使用方便,快捷,操作简单易于维护,易于被用户接受,用户只需熟悉操作计算机,和对此系统做简单的了解可方便使用。技术可行性::Java 技术日趋成熟,java的平台无关性使得用java的应用程序不用修改就可在不同的软硬件平台上运行,它支持数据分布和操作分布着两种分布性。Java提供了一整套网络类库,开发人员可以利用类库进行网络程序设计,方便实现java的分布式特性。另外java还支持多线程。Java提供了一个类thread,由它负责启动、运行、终止线程,并可检查线程状态。利用java的多线程编程接口,开发人员可以方便的写出至此后多线程的应用程序,提高程序执行效率。开发软件环境:winxp ,Sql server,Myeclipse。2.2.2 系统功能需求分析根据用户对聊天工具的要求,可分为以下几点:(1) 操作简单方便、界面简洁美观;(2) 可以在局域网实现文字和文件的传输;(3) 可以实现用户的注册、登录和注销;(4) 程序启动之后就能看到当前哪些用户在线,哪些可以与之进行对等通信。可以实现局域网聊天;(5) 一旦有某个网内的机器上线或下线了,要有即时通知,并能及时更新用户界面中的用户列表;(6) 当单击用户列表项的时候,直接在聊天对话框聊天,发送聊天信息;(7) 当有远程用户向本机发送文件的时候,弹出一个消息提示,用户可选择接收或者拒绝;(8) 文件传输过程中,应该有当前传输状态提示,并作为当前网络状态的一种反馈;(9) 为用户提供一个简单的聊天记录保存功能。聊天系统包括服务器端和客户端。服务器端的主要任务:服务器端应当建立一个ServerSocket,并且不断进行监听是否有客户端连接或者断开连接(包括判断没有响应的连接超时);服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。客户端主要完成的工作包括:与服务器端建立通信通道,向服务器端发送信息;接收来自服务器的信息。3系统设计3.1系统功能结构本系统中主要包括两个部分:服务器端和客户端。(1) 服务器端的功能包括:验证登录:检查登陆信息是否正确,并向客户端返回登陆信息,如信息正确,就将在线用户发给该用户,并将该用户的状态发给各在线用户,同时在服务器端显示出来。处理注册信息:用户提交注册信息后,自动验证是否重名,如果重名则返回提示,如果不重名则将信息加入数据库。 处理用户发送信息:服务器监控聊天内容,服务器过滤非法内容。发布系统消息:将此用户上线、下线消息发给各客户端,并在服务器端显示在线用户信息。保存聊天记录:在接收到用户保存聊天记录申请的同时,自动保存聊天记录为文本文件。保存服务器日志。(2) 客户端的功能包括:用户登录:建立与服务器的连接并登录,能显示登录错误信息。用户注册:建立与服务器连接并提交注册信息,注册成功后自动登录。界面显示:登录成功后,自动显示在线用户列表。发送消息:选择要发送对象后,可以发送文本消息或者文件。发送信息时,可以选择私聊,即其他人看不到信息。接收消息:收到其他用户消息后,提醒并显示。接收文件时可以选择接收或拒绝。聊天记录的保存:用户下线前自动向服务器发送申请保存聊天记录。3.2系统业务流程首先由服务器开启服务,监听局域网中客户端的连接请求,客户端连接后,登录或者处理注册信息,并返回操作结果。客户端注册或者登录成功后,显示聊天窗体,此时各客户端将自主的监听局域网中的用户,实时更新自己的用户列表并显示,各个客户端之间的信息交流不再通过服务器转发,而是自主通信。局域网聊天系统的业务流程图如图所示: 客户端聊天窗口协议发送消息 服务器聊天窗口 记录所有注册用户和显示当前在线人数发送消息发送消息 客户端登录窗口登录验证登录注册判断Y图3.1业务流程图3.3系统实现原理聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。客户与服务器之间用TCP协议连接,客户与客户之间通过服务器转发消息.其中用到了Socket,它是介于应用程序与硬件之间,并可以提供标准的函数以符合不同的网络硬件规格。图3.2 系统实现原理图3.模块化设计 软件模块化设计方法是从计算机实现的角度出发对整个软件进行审核和校验,将整个系统划分为不同的功能模块,实现软件的一个特定功能。各个功能模块之间具有相对独立性,便于整个软件的设计、实施、维护和扩充。这种模块化结构设计方法,为整个软件顺利进行奠定了基础。3. 数据库设计系统需求主要体现在用户的注册、登录、发送消息、接收消息、聊天记录的保存等方面,而本系统发送消息,接收消息,聊天记录保存均有客户端自主完成,因此不需要体现在数据库中,这样数据库只需存储用户的信息即可。数据库采用sql server,,里面建立了2个表,存储用户包含登录账号和密码的用户信息yonghu 表,用户发送消息记录的信息表log表。表3.1 用户的基本信息表列名custnamecusPasswordagesexemailhead用户名密码年龄性别电子邮箱头像vcharvcharvcharvcharvcharvcharlog表字段:登录用户(id),消息记录,时间3.开发环境与运行环境开发环境: 应用服务器数据库服务器系统:内存2G,硬盘320G运行环境:本系统是用Myeclipse工具开发的,所以首先要安装Myeclipse工具。这次的设计是在windows系统下,要先安装java的jdk 来支持Myeclipse的运行。本系统的安装环境为:Windows XP+JDK1.7 +Myeclipse 客户端结构客户端用来向服务器端发起一个连接,等待服务器的允许接入确认。若服务器端同意连接请求,接收到服务器的同意连接信号后,开启接收信息线程,并置消息发送事件为Enable,通信双方就可以进行文本聊天了。若服务器端拒绝连接,则释放Socket连接并关闭网络流。若已建立连接,当断开连接时,将向对方发送断开信号,然后将释放Socket和网络流,不影响到下一次连接的发起。ChatClientLoginWindowsCloseRegisterChatRoom启动客户端窗体监听程序用户注册窗体用户聊天窗体用户登录窗体图3.3客户端结构图ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。ChatRoom.java 为客户端程序聊天室主界面,负责接收、发送聊天内容等。 Windowclose 为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。3.8服务器端结构聊天内容过滤器AppServerConnectionWordFilterServerFrame服务器监听控制窗体启动服务器监听处理用户请求图3.4 服务器端结构图ServeFrame.java 为服务器端程序界面,负责为服务器的启动提供界面服务。AppServer.java 为服务器端启动界面,负责监听服务器的状态、在线人数、最多在线人数、服务器名称、访问协议、服务器IP、服务器端口以及用户信息的管理、日志的保存。Connection.java 是连接服务器和客户端的桥梁,主要负责将客户端的信息传送给服务器,并将服务器端的信息反馈给客户端,即所谓的“三次握手”,也是Socket编程的重要部分。WordFilter.java 负责将聊天过程中不合法的文字语句等过滤掉,返回合法内容。4 系统实现4.1新用户注册模块4.1.1注册流程当服务器收到用户注册请求后,开始接收该客户传递的消息,如用户的昵称、密码、性别、头像、个人资料等信息。接收完毕后,服务器通过jdbc 与后台数据库连接,向数据库添加记录。注册事件处理是客户端注册的主要部分。Java事件包括键盘事件,鼠标事件和按钮事件,而所用到的是鼠标事件就是点击鼠标时,系统会调用监听器。注册流程图:建立连接发送连接请求Socket请求连接信息发送完毕个人信息发送个人信息建立连接接收ServerSocket停止接收接收信息数据库执行数据库添加图4.1注册流程图4.1.2注册界面本界面要填写的项目包括:用户名,密码,邮件地址,需要选择的项目包括:性别,头像。 本界面主要负责将用户的信息包装成一个customer 对象。注册按钮一旦被点击,就会试图创建一个与服务器端的连接。连接创建成功就会将填写的信息发送到服务器端。图4.2 注册界面4.1.3源代码 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();data.head = comboBox.getSelectedItem().toString();try Socket toServer; toServer = new Socket(strServerIp,1001); ObjectOutputStream streamToServer=new ObjectOutputStream (toServer.getOutputStream(); streamToServer.writeObject(Register_Customer)data); BufferedReader fromServer=new BufferedReader(new InputStreamReader(toServer.getInputStream(); String status=fromServer.readLine(); JOptionPane op=new JOptionPane(); op.showMessageDialog(null,status); if(status.equals(data.custName+注册成功) txtUserName.setText(); pwdUserPassword.setText(); pwdConfirmPass.setText(); txtAge.setText(); txtEmail.setText(); streamToServer.close(); fromServer.close(); catch(Exception e) Syetem.out.println(e); 4.2 登录模块4.2.1 登录界面用户登录首先要与服务器连接,服务器的连接是在Connection类中实现。本界面需要填写的有两个,一个是用户名,一个是密码。在客户端,用户输入用户名和密码,然后建立与服务器的连接,告诉服务器我要登录,服务器收到后,开始通过jdbc读取数据库,然后与用户输入的信息比较,否则返回错误。图4.3 登录界面4.2.2 源代码public void login() Customer data = new Customer();data.custName = txtUserName.getText();data.custPassword = pwdPassword.getText();try Socket toServer;toServer = new Socket(strServerIp, 1001); ObjectOutputStream streamToServer = new ObjectOutputStream(toServer.getOutputStream();streamToServer.writeObject(Customer) data);BufferedReader fromServer = new BufferedReader(new InputStreamReader(toServer.getInputStream();String status = fromServer.readLine();if (status.equals(登录成功) new ChatRoom(String) data.custName, strServerIp);this.dispose();streamToServer.close();fromServer.close();toServer.close(); else JOptionPane.showMessageDialog(null, status);streamToServer.close();fromServer.close();toServer.close(); catch (Exception e) e.printStackTrace(); 4.3消息通信模块:与显示的在线好友间通信凡是聊天工具,都少不了文本聊天功能,这是个基本功能。通过文本聊天,局域网内用户能够发送和接收文字信息,并在程序窗体上显示出来,相互之间进行在线交流,并能根据用户需要,对聊天记录进行简单的保存。文本聊天的信息传输协议主要有面向连接的TCP和无连接的UDP。TCP协议是互联网中最重要的协议之一,主要特点是:保证数据包的准确到达;保证各数据包到达的顺序和数据包发出的顺序相同。UDP协议提供了快速但不一定可靠的传输服务,UDP协议采用无连接的套接字,不需要在网络设备之间发送连接信息,和TCP相比,UDP缺乏双方的握手信号,因此不保证数据包一定到达目的地,可靠性不如TCP,而且,由于UDP没有任何对双方会话的支持,不能保证各数据包到达的顺序与数据包发出的顺序相同。用户需要发送信息时,在聊天内容里写下要发送的信息,然后点击发送就可以发送到其他客户端,也可以选择私聊、聊天表情,聊天信息通过服务器发送到其他客户端。多人在线时,对某个人私聊,而第三个人的聊天界面不会看到私聊信息。图4.4 用户聊天窗口发送消息:public void sendMessage() Chat chatobj = new Chat();chatobj.chatUser = strLoginName;chatobj.chatMessage = txtMessage.getText();chatobj.chatToUser = String.valueOf(cmbUser.getSelectedItem();chatobj.whisper = chPrivateChat.isSelected() ? true : false;chatobj.emote = emote.getSelectedItem().toString();try Socket toServer = new Socket(strServerIp, 1001);ObjectOutputStream outObj = new ObjectOutputStream(toServer.getOutputStream();outObj.writeObject(chatobj);txtMessage.setText(); outObj.close();toServer.close(); catch (Exception e) 4.4 服务器端4.4.1 服务器端界面 服务器端界面主要包含:当前在线人数、服务器名称 、服务器IP 、服务器端口 、用户注册、登录、退出的信息 ,在线用户列表 、发送系统消息等。图4.5 服务器端界面 1图4.6 服务器端界面2 4.4.2 源代码public Connection(ServerFrame frame, Socket client, Vector u, Vector c) netClient = client;userOnline = u;userChat = c;sFrame = frame;try fromClient = new ObjectInputStream(netClient.getInputStream();toClient = new PrintStream(netClient.getOutputStream(); netClient.close(); catch (Exception e) System.out.println(e);return;this.start();public void run() try obj = (Object) fromClient.readObject();if (obj.getClass().getName().equals(Customer) serverLogin(); if (obj.getClass().getName().equals(Register_Customer) serverRegiste(); if (obj.getClass().getName().equals(Message) serverMessage(); if (obj.getClass().getName().equals(Exit) serverExit(); netClient.close(); catch (Exception e) System.out.println(e); public void serverLogin() try Customer clientMessage2 = (Customer) obj;FileInputStream file3 = new FileInputStream(user.txt);ObjectInputStream objInput1 = new ObjectInputStream(file3); vList = (Vector) objInput1.readObject();int find = 0; for (int i = 0; i vList.size(); i+) Register_Customer reg = (Register_Customer) vList.elementAt(i);if (reg.custName.equals(clientMessage2.custName) find = 1;if(!reg.custPassword.equals(clientMessage2.custPassword) toClient.println(密码不正确);break; else int login_flag = 0; for (int a = 0; a userOnline.size(); a+) String _custName = (Customer) userOnline.elementAt(a).custName; if (clientMessage2.custName.equals(_custName) login_flag = 1;break; if (login_flag = 0) clientMessage2.custHead = reg.head; userOnline.addElement(clientMessage2); toClient.println(登录成功); Date t = new Date();log(用户 + clientMessage2.custName + 登录成功,+ 登录时间: + t.toLocaleString() + n); freshServerUserList(); break; else toClient.println(该用户已登录); if (find = 0) toClient.println(没有这个用户,请先注册);file3.close();objInput1.close();fromClient.close();catch (Exception e) System.out.println(e); private void freshServerUserList() String userList = new String50;Customer cus = null;for (int j = 0; j userOnline.size(); j+) cus = (Customer) userOnline.get(j);userListj = cus.custName;sFrame.list.setListData(userList);sFrame.txtNumber.setText( + userOnline.size();sFrame.lblUserCount.setText(当前在线人数: + userOnline.size();public void serverRegiste() try int flag = 0; Register_Customer clientMessage = (Register_Customer) obj;File fList = new File(user.txt);if (fList.length() != 0)ObjectInputStream objInput = new ObjectInputStream(new FileInputStream(fList);vList = (Vector) objInput.readObject();for (int i = 0; i vList.size(); i+) Register_Customer reg = (Register_Customer) vList.elementAt(i);if (reg.custName.equals(clientMessage.custName) toClient.println(注册名重复,请另外选择);flag = 1;break; else if (reg.custName.equals(所有人) toClient.println(禁止使用此注册名,请另外选择);flag = 1;break;if (flag = 0) vList.addElement(clientMessage); FileOutputStream file = new FileOutputStream(fList);ObjectOutputStream objout = new ObjectOutputStream(file);objout.writeObject(vList);toClient.println(clientMessage.custName + 注册成功);Date t = new Date();log(用户 + clientMessage.custName + 注册成功, + 注册时间:+ t.toLocaleString() + n);file.close();objout.close();fromClient.close(); catch (Exception e) System.out.println(e);public void serverExit() Exit exit = new Exit();exit = (Exit) obj;removeUser(ex

温馨提示

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

评论

0/150

提交评论