基于java的聊天室程序设计.doc_第1页
基于java的聊天室程序设计.doc_第2页
基于java的聊天室程序设计.doc_第3页
基于java的聊天室程序设计.doc_第4页
基于java的聊天室程序设计.doc_第5页
已阅读5页,还剩127页未读 继续免费阅读

下载本文档

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

文档简介

基于Java的聊天室程序设计CHAT ROOM PROGRAMMING BASED ON JAVA 专 业: 计算机科学与技术 姓 名: 指导教师姓名: 申请学位级别: 学 士 论文提交日期: 学位授予单位: 天津科技大学摘 要网络聊天室是一种应用广泛的网络聊天方式,操作简单,功能丰富,是教学和学习面向对象的编程思想的理想项目。可以使用多种编程语言和开发功能完善网络聊天室。本毕业设计论文介绍用Java语言设计和实现一个网络聊天室的过程,本系统采用C/S架构设计,整个项目分为服务器端和客户端。使用最新Java2标准Swing组件,开发出简洁美观和布局合理的用户和服务器界面;利用Socket网络开发急速实现客户端和服务器端的连接访问,实现网络功能;通过对数据流操作的合理设计,实现信息传递、接受和数据保存。同时采用多线程、多任务的设计思想开发出性能稳定,功能全面的服务器。完整的实现系统的功能。该聊天室工具主要解决了两方面的问题。服务器端和客户端。在服务器端可以实现如下功能:能够处理用户的注册;通过身份验证方式处理用户登录;可以向所有在线用户广播信息;对于不良聊天人士给予警告或者赶出聊天室;删除长久不使用的用户信息;配有操作文档;及时接收用户的服务请求帮助。在客户端可以实现如下功能:聊天信息的传输,支持私聊,支持表情等功能。 关键词:聊天室; Java; Swing组件; Socket技术IABSTRACTThe network chat room is a kind of applied extensive network chat method, operate in case and the function is abundant, It can be used as a good case for learning of Java design language and the Object-Oriented Programming language, There is many programming language of design to develop a network chat room with perfect function. This graduation thesis of design introduction how to use the Java language design and carry out network chat room, The system adoption the C/S structure design, the whole system is divided into the server and client. Used standard modules of Swing of latest Java2, develop a simple and direct beauty user interface, We make use of the Socket technology to interconnect the server and client by net-work; organize the data by good design of data stream to sent or accept the message between users and to record the message for data ever; we also use the multi-thread to make the program with many function.This chat rooms tool will solve two main problems, one is server and the other is customer. It will obtain following functions with server: handing the registration of customer; passing verification of body method; processing customer logging; broadcasting information to on-line customers; warning and evicting bad chat personage out of chat room ; deleting long-last the customer information; having operating text; accepting customers serving requests. It will obtain following functions with customer: delivering the chat information; supporting private chat; supporting the facial expression; ect.Key words:chat; Java; Swing component; Socket目 录第一章 系统开发的意义及需求分析1第一节 课题来源1第二节 需求分析1第二章 系统开发技术2第一节 Java的网络功能与编程2第二节 IP/TCP协议常识3第三节 Socket的简介3第四节 Swing的简介5第五节 C/S结构6第三章 系统分析与设计方案8第一节 开发环境及工具8第二节 聊天系统的总体设计要点8第三节 系统的功能模块划分及设计原理10第四章 系统实现与最终效果25第一节 系统工作的过程25第二节 使用方法25第三节 各功能模块运行效果25第四节 功能模块测试31第五章 总 结32第一节 毕业设计总结和展望32第二节 经验和感想32参考文献34致 谢3534天津科技大学2011届本科生毕业设计第一章 系统开发的意义及需求分析第一节 课题来源根据当前网络的需求,网络聊天越来越受到各种网民所青睐。因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时的互相交流。而本人也学习过Java语言,对网络编程也较有兴趣,为了更好的考验自己对Java语言的掌握程度,本人就决定以基于Java的网络聊天室为毕业设计,希望通过这一次能进一步提高本人的网络开发编程的能力。第二节 需求分析聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。首先来看一下服务器。服务器端的任务:1、服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接。 2、服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。以上就是服务器端最主要的两个任务。不难看出,服务器端的任务并不复杂。客户端应该完成的工作包括:1、与服务器端建立通信通道,向服务器端发送信息。2、接收来自服务器的信息。相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述四个问题,即完成了该聊天系统的核心。第二章 系统开发技术第一节 Java的网络功能与编程一、Java概述:美国硅谷有一句行话,每10年15年有一次轮回。最近的一次轮回就是从Java开始。Java是一个由Sun公司开发而成的新一代编程语言。使用它可在各式各样不同种机器、不同种操作平台的网络环境中开发软件。不论你使用的是哪一种www浏览器,哪一种计算机,哪一种操作系统,只要www浏览器上面注明了“支持Java”,你就可以看到生动的主页。Java正在逐步成为Internet应用的主要开发语言。它彻底改变了应用软件的开发模式,带来了自PC机以来又一次技术革命,为迅速发展的信息世界增添了新的活力。Java语言有下面一些特点:简单、面向对象、分布式、解释执行、 安全、体系结构中立、可移植、高性能、多线程以及动态性。丰富的类库Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。语言包提供的支持包括字符串处理、多线程处理、数学函数处理等,可以用它简单地实现Java程序的运行平台。实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。输入输出包用统一的流模型来实现所有格式的I/O,包括文件系统、网络、输入低级网络包用于实现Socket编程。抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同平台的机器。网络包支持Internet的TCP/IP协议,提供了与Internet的接口。 它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。Java和C、C+对于变量声明、参数传递、操作符、流控制等使用了相同的传统,使得熟悉C、C+的程序员能很方便地进行编程。同时, Java为了实现其简单、安全等特性,也摒弃了C和C+中许多不合理的内容1。二、Java语言在网络上的应用Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。例如Java程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。在编程处理上,一般先生成一个URL类型的对象,然后用Java中相应的方法(method)获取该对象所代表的资源。第二节 IP/TCP协议常识一、IP、TCP协议的特点:TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写, TCP/IP是当今网络互联的核心协议。TCP/IP协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。IP协议的作用:第一,它是网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。TCP协议的功能:差错控制可靠性、面向连接、分段(Segment)、端口号。TCP是传输控制协议,是面向连接的提供了一种可靠的传输服务,它用三次握手和滑动窗口机制来保证传输的可靠性,及进行流量控制。二、TCP/IP协议进行传输数据传输的过程:应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP数据包封装在IP包内,通过网络送给目的TCP。接收方TCP在接收到数据后通知上层应用程序,TCP将保证接收数据的正确性。在实现TCP的主机上,TCP可以被看成是一个模块,和文件系统区别不大,TCP 也可以调用一些操作系统的功能,TCP不直接和网络打交道,控制网络的任务由专门的设备驱动模块完成。TCP只是调用IP接口,向TCP提供所有TCP需要的服务2。三、端口号:有的时候,一个ip地址不能完整的标识一台服务器,这是因为一台物理性的计算机同时运行着多个应用程序,这就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是端口。端口实际是一个16位长的地址,他的范围是065535之间,其中01023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都知道的,102465535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的个客户端应用程序。在数据传输过程中,各种服务器不断的检测分配给他的端口,一边发现要求和他通信的客户端3。第三节 Socket的简介Socket简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。Java通过socket来完成它所有的网络底层的通讯,socket是一种通讯的通道,通过它可以将数据通过特定的端中发送及接收。Java中的socket可以分成二大类:Datagram Sockets(数据包socket)和 Stream Sockets(流socket)。Stream Socket有一个永久性的链接,可以确保数据可靠的发送到对方。但是Stream Socket所占的资源更多。Java主要通过Socket及ServerSocket来实现Stream Socket,一个用于客户端,另一个用户服务器端。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服务器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个Socket建立连接,客户端通过写Socket来通知服务器,以读Socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个Socket,通过读写和客户端通信8。客户机必须知道有关服务器的IP地址。对于着一点Java也提供了一个相关的类InetAddress 该对象的实例必须通过它的静态方法来提供。它的静态方法主要提供了得到本机IP 和通过名字或IP直接得到InetAddress的方法。上面的方法基本可以建立一条连线让两台计算机相互交流了。数据则是通过I/O流进行传输。因为底层的网络是继续数据的。除非远程调用,处理问题的核心在执行上。 所以你也必须导入Java.io这个包。Java的IO操作也不复杂。它提供了针对于字节流和Unicode的读者和写者,然后也提供了一个缓冲用于数据的读写。而原始的字节流来源于Socket的两个方法,getInputStream()和getOutputStream()方,分别用来得到输入和输出。服务器可以不断接收客户机所写入的信息只到。客户机发送End字符串就退出程序。并且服务器也会做出Receive为回应。Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上建立一个Socket意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。 两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。一、Socket程序的工作过程:1.建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接道。2.数据通信:利用虚拟连接通道传送数据信息进行通信。3.关闭:通信结束时,再将所建的虚拟连接拆除。具体如下:1服务器serversocket2监听4.连接5读6写7关闭3客户端socket6读5写7关闭图2-1 Socket程序的工作过程二、三次握手协议:第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,再向目的主机发送一个带有两次连接的序列号的确认。具体过程如下: 图2-2三次握手协议第四节 Swing的简介AWT是Swing的基础。Swing的产生主要原因就是AWT不能满足图形化用户界面发展的需要。 AWT设计的初衷是支持开发小应用程序的简单用户界面。例如AWT缺少剪贴板、打印支持、键盘导航等特性,而且原来的AWT甚至不包括弹出式菜单或滚动窗格等基本元素。随着发展的需要,Swing出现了,Swing组件几乎都是轻量组件,与重量组件相比,没有本地的对等组件,不像重量组件要在它们自己的本地不透明窗体中绘制,轻量组件在它们的重量组件的窗口中绘制。Swing是由100%纯Java实现的,Swing组件是用Java实现的轻量级(light -weight)组件,没有本地代码,不依赖操作系统的支持,这是它与AWT组件的最大区别。由于AWT组件通过与具体平台相关的对等类(Peer)实现,因此Swing比AWT组件具有更强的实用性。Swing在不同的平台上表现一致,并且有能力提供本地窗口系统不支持的其它特性。Swing采用了一种MVC的设计范式,即“模型-视图-控制”(Model-View- Controller),其中模型用来保存内容,视图用来显示内容,控制器用来控制用户输入。Swing外观感觉采用可插入的外观感觉(Pluggable Look and Feel,PL&F)。在AWT组件中,由于控制组件外观的对等类与具体平台相关,使得AWT组件总是只有与本机相关的外观。Swing使得程序在一个平台上运行时能够有不同的外观。用户可以选择自己习惯的外观。一、框架、监听器和事件:框架 (Frame, JFrame) 是 Java 图形用户界面的基础,它就是我们通常所说的窗口,是 Windows/XWindow 应用程序的典型特征。说到 Windows/XWindow,大家很容易联想到“事件 (Event) 驱动”。Java 的图形用户界面正是事件驱动的,并且由各种各样的监听器 (Listener) 负责捕捉各种事件。如果我们需要对某一个组件的某种事件进行捕捉和处理时,就需要为其添加监听器。比如,我们要在一个窗口 (JFrame) 激活时改变它的标题,我们就需要为这个窗口 (JFrame 对象) 添加一个可以监听到“激活窗口”这一事件的监听器WindowListener。添加监听器通常由组件类提供的一个 addXxxxxListener 的方法来完成。比如 JFrame 就提供有 addWindowListener 方法添加窗口监听器 (WindowListener)。二、按钮、切换按钮、复选按钮和单选按钮切换按钮,有两种状态的按钮,即按下状态和弹起状态,若称为选择状态或未选择状态。复选按钮,又叫复选框,用一个小方框中是否打勾来表示两种状态。单选按钮,又叫收音机按钮,以小圆框打点表示被选中。常成组出现,一组单选按钮中只有一个能被选中。除一般按钮外,其余三种按钮都有两种状态,即选择 (按下) 状态和未选择 (弹起) 状态。那么我们又该如何判断呢?切换按钮 (JToggleButton) 提供了一个 isSelected() 方法用来判断当前所处的状态,返回值为真 (true) 时表示它处于选择状态,返回值为假 (false) 时表示它处于未选择状态。而复选按钮 (JCheckBox) 和单选按钮 (JRadioButton) 都是从 JToggleButton 继承的,所以也具有 isSelected() 方法。三、文本输入框、密码输入框文本输入框包括两种,单行文本输入框 (JTextField) 和多行文本输入框 (JTextArea)。密码输入框则只有一种 (JPasswordField)。JPasswordField 是 JTextField 的子类,它们的主要区别是 JPasswordField 不会显示出用户输入的东西,而只会显示出程序员设定的一个固定字符,比如 * 或者 #。四、窗格、滚动窗格和布局管理窗格 (JPanel) 和滚动窗格 (JScrollPane) 在图形用户界面设计中大量用于各种组件在窗口上的布置和安排。这里所谓的布置和安排,就是布局 (Layout)。将加入到容器(通常为窗口等) 的组件按照一定的顺序和规则放置,使之看起来更美观,这就是布局。布局由布局管理器 (Layout Manager) 来管理。我们设计一个窗口,其中是要添加若干组件的。为了管理好这些管理的布局,我们就要使用布局管理器。比如说,设计一个简单的编辑器,这个编辑器中只需要放置两个按钮和一个多行文本框。这些组件是是按照一定的位置关系较规范的安排的。那么,为了按照一定的位置关系安排这些组件,需要用到布局管理器了。常用的布局管理器有: FlowLayout、BorderLayout、GridLayout、BoxLayout 等,其中 FlowLayout 和 BorderLayout 最常用。第五节 C/S结构C/S 结构,即大家熟知的客户机和服务器结构。它是软件系统体系结构,通过它可以充分利用两端硬件环境的优势,将任务合理分配到Client端和Server端来实现,降低了系统的通讯开销。目前大多数应用软件系统都是Client/Server形式的两层结构,由于现在的软件应用系统正在向分布式的Web应用发展,Web和Client/Server 应用都可以进行同样的业务处理,应用不同的模块共享逻辑组件;因此,内部的和外部的用户都可以访问新的和现有的应用系统,通过现有应用系统中的逻辑可以扩展出新的应用系统。这也就是目前应用系统的发展方向。Client/Server或客户/服务器模式:Client和Server常常分别处在相距很远的两台计算机上,Client程序的任务是将用户的要求提交给Server程序,再将Server程序返回的结果以特定的形式显示给用户;Server程序的任务是接收客户程序提出的服务请求,进行相应的处理,再将结果返回给客户程序。 一、C/S工作模式C/S 结构的基本原则是将计算机应用任务分解成多个子任务,由多台计算机分工完成,即采用“功能分布”原则。客户端完成数据处理,数据表示以及用户接口功能;服务器端完成DBMS的核心功能。这种客户请求服务、服务器提供服务的处理方式是一种新型的计算机应用模式。二、C/S结构的优点C/S结构的优点是能充分发挥客户端的处理能力,很多工作可以在客户端处理后再提交给服务器。对应的优点就是客户端响应速度快。缺点主要有以下几个: 只适用于局域网。而随着互联网的飞速发展,移动办公和分布式办公越来越普及,这需要我们的系统具有扩展性。这种方式远程访问需要专门的技术,同时要对系统进行专门的设计来处理分布式的数据。 客户端需要安装专用的客户端软件。首先涉及到安装的工作量,其次任何一台电脑出问题,如病毒、硬件损坏,都需要进行安装或维护。特别是有很多分部或专卖店的情况,不是工作量的问题,而是路程的问题。还有,系统软件升级时,每一台客户机需要重新安装,其维护和升级成本非常高。 第三章 系统分析与设计方案第一节 开发环境及工具本系统所用的工具:服务器端:(Windows平台)首先应有Java环境jdk,建议采用jdk1.4.2;Eclipse。客户端: Java环境jdk,建议jdk1.42;Eclipse。 本系统运行所需用到的环境为:硬件配置 :中央处理器(CPU) :P4 2.0G以上的处理器;硬 盘:40GB以上硬盘;内 存:256以上的DDR内存;显 卡:128M以上显存显卡软件配置:WINDOWS XP 版本、All-In-One-Eclipse-311、j2sdk-1.42等。第二节 聊天系统的总体设计要点一、实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。服务器端工作流程:服务器端通过系统调用创建一个ServerSocket与指定的本地端口绑定,就可以在端口进行侦听。如果有客户端连接请求,则创建一个Socket,将客户端地址赋给这个Socket。然后登录成功的客户就可以在服务器上聊天了。客户端工作流程:客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。二、系统功能流图:否是服务器serversocket监听建立与客户端连接的套接字1.读客户端信息2.向客户端转发信息关闭服务器客户端socket1.读服务端信息2向服务器写信息关闭客户端启动AppServer.java启动ChatClient.java登录注册是否注册图3-1 系统功能流图功能流说明如下:1.启动服务器程序,服务器端创建一个ServerSocket对象,指定端口号。2.ServerSocket对象等候客户端的连接请求。3.启动客户端程序,登录用户。如果未注册,先注册再登录。登录成功进入聊天室用户界面。4.客户端创建一个Socket对象,指定主机地址和端口号,向服务器发送连接请求。5.服务器端收到客户端请求,建立一条TCP连接,再创建一个Socket对象与客户端的Socket对象进行通信。6.服务器端和客户端分别建立字节输入/输出流,进行数据传输准备。7.服务器端和客户端通过各自的字节输入流获得对方发送过来的数据,通过字节输出向对方发送数据。8.一方决定结束通信,向对方发送结束信息,另一方收到结束信息后,双方分别关闭各自的TCP连接。9.对象停止等候客户端连接请求。三、多用户实时工作原理图图3-2 多用户实时工作原理图注:服务器的run()方法中采用了while(true)结构,不断监听客户端的请求,如收到请求,建立与当前请求的客户端连接的套接字,从而与客户端建立联系。第三节 系统的功能模块划分及设计原理当用户聊天时,将当前用户名、聊天对象、聊天内容和是否私聊进行封装并且序列化,然后与服务器建立Socket连接,再用对象输出流包装Socket的输出流将聊天信息对象发送给服务器端。当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问。接收用户的聊天信息是由多线程技术实现的,因为客户端必须时时关注更新服务器上是否有最新消息,在本程序中设定的是1秒刷新服务器一次,如果间隔时间太短将会增加客户端与服务器端的通信负担,而间隔时间长就会让人感觉没有时效性,所以经过权衡后认为1秒最佳,因为每个用户都不可能在1秒内连续发送信息。当每次用户接收到聊天信息后将会开始分析聊天信息然后将适合自己的信息人性化显示在聊天信息界面上。一、服务器程序模块(AppServer.Java)服务器与客户间通过套接口Socket(TCP)连接。在Java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类J.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为8000,然后无限循环调用accept()方法接受客户程序的连接。服务器具有以下功能:1.启动服务,建立侦听,接受客户端连接。2.从流中读取经过序列化的对象。3.分析读取的对象进行相应的操作(登录信息的验证反馈、注册信息的验证和反馈、转发聊天信息等)4.向客户端发送系统消息。5.保存日志 6.关闭服务,并向客户端发送服务器关闭消息。服务器程序模块源码:private ServerSocket serverSocket;private ServerFrame sFrame;private static Vector userOnline = new Vector(1, 1);private static Vector v = new Vector(1, 1);/创建服务器 启动服务监听1001端口 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);/* * 监听客户的请求,当有用户请求时创建 Connection线程 */public void run() try while (true)/ 监听并接受客户的请求Socket client = serverSocket.accept();new Connection(sFrame, client, userOnline, v); / 支持多线程 catch (IOException e) fail(e, 不能监听!); /* * 启动服务器 */public static void main(String args) new AppServer();当用户发送聊天信息时,服务端将会收到客户端用Socket传输过来的聊天信息对象,然后将其强制转换为Chat对象,并将本次用户的聊天信息对象添加到聊天对象集Message中,以供所有聊天用户访问。二、登录程序模块(Login.Java)是客户端程序登录界面,负责用户帐号信息的验证与接收服务器的反馈。客户端请求连接,服务器的accept()方法建立与客户端的套接字连接。客户端将登录信息封装成Customer对象通过输出流发送服务器,等待服务器的验证,服务器反馈验证信息,客户端根据反馈信息进行登录和登录信息错误处理。关键代码如下:public void actionPerformed(ActionEvent ae) Object source = ae.getSource();if (source.equals(btnLogin) / 判断用户名和密码是否为空if (txtUserName.getText().equals()| pwdPassword.getText().equals() JOptionPane op1 = new JOptionPane();op1.showMessageDialog(null, 用户名或密码不能为空); else strServerIp = txtServer.getText();login();if (source.equals(btnRegister) strServerIp = txtServer.getText();this.dispose();new Register(strServerIp);if (source = btnExit) System.exit(0); / actionPerformed()结束public void login() / 接受客户的详细资料Customer data = new Customer();data.custName = txtUserName.getText();data.custPassword = pwdPassword.getText();try / 连接到服务器Socket toServer;toServer = new Socket(strServerIp, 1001);ObjectOutputStream treamToServer= new ObjectOutputStream(toServer.getOutputStream();/ 写客户详细资料到服务器socketstreamToServer.writeObject(Customer) data);/ 读来自服务器socket的登录状态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 (ConnectException e1) JOptionPane.showMessageDialog(null, 未能建立到指定服务器的连接!); catch (InvalidClassException e2) JOptionPane.showMessageDialog(null, 类错误!); catch (NotSerializableException e3) JOptionPane.showMessageDialog(null, 对象未序列化!); catch (IOException e4) JOptionPane.showMessageDialog(null, 不能写入到指定服务器!); / login()结束/* * 启动登陆窗体 * param args */public static void main(String args) new Login(); 三、注册程序模块(Register.Java)为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。注册模块的原理跟登录模块基本相同。注册信息封装成Register_Customer对象,但服务器只验证用户名,且只要求用户名不重复,服务器检验注册信息文件中的用户名,若不重复则反馈注册成功的信息。其他的注册信息(密码、年龄、邮箱)合法性都交给注册模块自己完成。关键代码如下:public void actionPerformed(ActionEvent ae)Object source=new Object();source=ae.getSource();if (source.equals(btnOk) /确定按钮 register(); if (source.equals(btnCancel) /返回按钮 new Login(); this.dispose(); if (source.equals(btnClear) /清空按钮 txtUserName.setText(); pwdUserPassword.setText(); pwdConfirmPass.setText(); txtAge.setText(); txtEmail.setText(); /actionPerformed()结束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();/验证用户名是否为空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;/验证Email的正确性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; toServer = new Socket(strServerIp,1001); ObjectOutputStream streamToServer=new ObjectOutputStream (toServer.getOutputStream(); /写客户详细资料到服务器socket streamToServer.writeObject(Register_Customer)data); /读来自服务器socket的登陆状态 BufferedReader fromServer=new BufferedReader(new InputStreamReader

温馨提示

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

评论

0/150

提交评论