资源描述
本科毕业论文(科研训练、毕业设计)题 目:基于JAVA的网络安全聊天工具:网络功能部分姓 名:黄侨星学 院:信息科学与技术学院系:计算机科学系专 业:计算机科学与技术专业年 级:2006级学 号:23020062203895指导教师(校内):庄朝晖 职称:助理教授2010年 5 月 7 日基于JAVA的网络安全聊天工具:网络功能部分摘要 :人随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeting、腾讯QQ、MSN-Messager等等。但是越来越多的服务导致了信息的安全性一直在下降,所以小团体小范围内的聊天工具就显得十分有必要了,这也是我们一开始选择这个课题的初衷。本工具系统开发主要包括一个服务器程序和一个客户程序两个方面。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。后者通过与服务器建立连接,来进行客户端与客户端的信息交流。其中通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。关键词: 聊天工具 数据库 socket java C/SJAVA-based network safety chat implement: Network function partAbstract: Person develops with Internet fleetness , the network chat implement already exchanges an implement as one kind of important information, favour by more and more many rebel citizen. At present, many very good chat implements has appeared , Netmeeting applying comparatively broad having among them, has pranced message QQ , MSN-Messager etc.More and more many service has led to but the information security have been coming down , the chat implement within range has looked like being necessary very therefore groupuscule is small , this has been also that we once start the original intention choosing this problems. Implement system develop includes one server procedure and a two customers procedure aspect mainly. The former builds a server by Socket cover meet character , the server can fetch , transmit a customer to hold hair doing information, can refresh consumer listing together. The latter passes with server building-up connection , does the end carrying out a customer and customer whole course of information exchange. Come to build multiwire Cheng among them by inheriting Thread directly the kind. Developing the fundamental theory knowledge being hit by the programming having made use of a computer network , holding the pattern (Client/Server pattern) , network programming design procedures if the TCP/IP agreement , the customer hold/ a server and so on.Keyword: Chat implement ; data base ;socket ; java ; C/S目 录目录4第一章 绪论5 1.1 JAVA的网络功能与编程5 1.1.1 网络编程基础知识5 1.1.2 IP/TCP协议常识5 1.1.3 Socket的简介6 1.2 网络编程在JAVA上的实现8 1.2.1 Java网络应用模型8 1.2.2 客户机/服务器环境下的Java应用程序8第二章 java网络安全聊天系统设计10 2.1课题来源10 2.2 聊天系统的设计步骤及功能模块划分10 2.3聊天系统各功能模块10 2.4 需求分析11 2.5 聊天系统的总体设计要点12第三章 系统设计与实现16 3.1 开发环境与工具16 3.2 硬件环境16 3.3 各个功能模块的具体实现16 3.3.1 服务器的具体实现16 3.3.2客户端的具体实现18 3.3.3 组员的加密实现19 3.4 功能模块的测试20第四章 总结26 4.1 毕业设计总结与展望26 4.2 经验与感想26致谢语27参考文献28第1章 绪论引言 随着互联网逐步普及,人们的生活和工作也越来越离不开信息网络的支持, 而QQ聊天工具等是人们最常见, 最直接的网上交流的方式。本聊天系统以聊天交流为主,为广大用户提供一个借助网络进行人际交往的平台。 本文所介绍的网络聊天系统是基于开放的JAVA应用程序开发设计的,其主要特性是能动态、实时的完成信息的传递,且具有高效的交互性,更有效的处理客户请求,易于维护和更新,其运行所需环境及其工作流程和各个功能控件的工作原理将在本文依次介绍,并且文中提供了部分程序源代码。1.1 JAVA的网络功能与编程1.1.1 网络编程基础知识 网络编程的目的就是指直接或间接地通过网络协议与其他计算机进行通讯。网络编程中有两个主要的问题,一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。而TCP层则提供面向应用的可靠的或非可靠的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。 目前较为流行的网络编程模型是客户机/服务器(C/S)结构。即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也能及时得到服务。(参考文献23)1.1.2 IP/TCP协议常识(1)IP、TCP协议的特点: TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写, TCP/IP是当今网络互联的核心协议。TCP/IP协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。 IP协议的作用:第一,它是网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。 TCP协议的功能:差错控制可靠性、面向连接、分段(Segment)、端口号。TCP是传输控制协议,是面向连接的提供了一种可靠的传输服务,它用三次握手和滑动窗口机制来保证传输的可靠性,及进行流量控制。 TCP/IP协议具有以下特点:协议标准具有开放性,其独立于特定的计算机硬件及操作系统,可以免费使用。统一分配网络地址,使得每个TCP/IP 设备在网络中都具有唯一的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为一般端口,也称动态端口、连接端口,用来随时分配要求通信的各个客户端应用程序。在数据传输过程中,服务器不断的检测分配给他的端口,发现要求和他通信的客户端。(参考文献24)1.1.3 Socket的简介 Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接字是在比较低的层次上通信的。 具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服务器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个socket建立连接,客户端通过写socket来通知服务器,以读socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。 Socket程序的工作过程:1、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。2、数据通信:利用虚拟连接通道传送数据信息进行通道。3、关闭:通信结束时,再将所建的虚拟连接拆除。具体如下:服务器(图1.1 网络socket主要流程图)三次握手:第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,在向目的主机发送一个带有两次连接的序列号的确认。具体过程如下(图1.2 三次握手的流程)1.2 网络编程在JAVA上的实现1.2 .1 Java网络应用模型和Internet上的许多环境一样,完整的Java应用环境实际上也是一个客户机/服务器环境,更确切地说是浏览器/服务器模型(即Browser/Server模型,简称Web模型)。但与传统的客户机/服务器(C/S) 的二层结构不同,应用Java的Web模型是由三层结构组成的。传统的C/S结构通过消息传递机制,由客户端发出请求给服务器,服务器进行相应处理后经传递机制送回客户端。而在Web模型中,服务器一端被分解成两部分:一部分是应用服务器(Web 服务器),另一部分是数据库服务器。 针对分布式计算环境,Java通过其网络类库提供了良好的支持。对数据分布,Java提供了一个URL(Uniform Resource Locator) 对象, 利用此对象可打开并访问网络上的对象,其访问方式与访问本地文件系统几乎完全相同。对操作分布,Java的客户机/ 服务器模式可以把运算从服务器分散到客户一端(服务器负责提供查询结果,客户机负责组织结果的显示),从而提高整个系统的执行效率,增加动态可扩充性。Java网络类库是Java 语言为适应Internet 环境而进行的扩展。另外,为适应Internet的不断发展,Java还提供了动态扩充协议,以不断扩充Java网络类库。 Java的网络类库支持多种Internet协议,包括Telnet, FTP 和 (WWW),与此相对应的Java网络类库的子类库为: J J.ftp J. content J. html J. 这些子类库各自容纳了可用于处理Internet协议的类和方法。其中,用于处理一些基本的网络功能,包括远程登录(Telnet);.ftp用于处理ftp协议;. content用于处理WWW 页面内容;. html 和. 则分别提供了对HTML 语言和 协议的支持。1.2 .2 客户机/服务器环境下的Java应用程序 客户机/服务器在分布处理过程中,使用基于连接的网络通信模式。该通信模式首先在客户机和服务器之间定义一套通信协议,并创建一Socket类,利用这个类建立一条可靠的链接;然后,客户机/服务器再在这条链接上可靠地传输数据。客户机发出请求,服务器监听来自客户机的请求,并为客户机提供响应服务。这就是典型的请求- 应答 模式。下面是客户机/服务器的一个典型运作过程: 1、服务器监听相应端口的输入; 2、客户机发出一个请求; 3、服务器接收到此请求; 4、服务器处理这个请求,并把结果返回给客户机; 5、重复上述过程,直至完成一次会话过程。 按照以上过程,我们使用Java语言编写一个分别针对服务器和客户机的应用程序(Application)。该程序在服务器上时,程序负责监听客户机请求,为每个客户机请求建立Socket 连接,从而为客户机提供服务。本程序提供的服务为:读取来自客户机的一行文本,反转该文本,并把它发回给客户机。通过该程序实例我们看到,使用Java语言设计C/S程序时需要注意以下几点: (1)、 服务器应使用ServerSocket 类来处理客户机的连接请求。当客户机连接到服务器所监听的端口时,ServerSocket将分配一新的Socket 对象。这个新的Socket 对象将连接到一些新端口,负责处理与之相对应客户机的通信。然后,服务器继续监听ServerSocket,处理新的客户机连接。 Socket 和ServerSocket 是Java网络类库提供的两个类。(2)、服务器使用了多线程机制。Server对象本身就是一个线程,它的run()方法是一个无限循环,用以监听来自客户机的连接。每当有一个新的客户机连接时,ServerSocket就会创建一个新的Socket类实例,同时服务器也将创建一新线程,即一个Connection 对象,以处理基于Socket 的通信。与客户机的所有通信均由这个Connection 对象处理。Connection的构造函数将初始化基于Socket 对象的通信流,并启动线程的运行。与客户机 的通信以及服务的提供,均由Connection对象处理。 (3)、客户机首先创建一个Socket对象,用以与服务器通信。之后需创建两个对象:DataInputStream 和DataOutputStream,前者用以从Socket 的InputStream 输入流中读取数据,后者则用于往Socket的OutputStream 中写数据。最后,客户机程序从标准输入(如:控制台)中读取数据,并把这些数据写到服务器,在从服务器读取应答消息,然后把这些应答消息写到准输出。第二章 java网络安全聊天系统设计2.1课题来源 根据当前网络的需求,网络聊天越来越受各种网民所青睐。越来越多的人使用QQ,同时也越来越多的人对于QQ聊天的安全性担忧,各种各样的QQ病毒,QQ木马,以及未加密的明文传送,让我们的网络聊天环境越来越不安全。因此我决定以 基于java的网络安全聊天工具 作为检验我4年学习的课题。2.2 聊天系统的设计步骤及功能模块划分聊天系统工作原理图 (图2.1 服务器和客户端之间关系)2 .3聊天系统各功能模块(1)服务器程序模块 服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类.Socket,使得编写网络应用程序相对容易。服务器采用多线程以满足多用户的请求,并通过创建一个ServerSocket对象来监听来自客户的连接请求,默认端口为6868,然后无限循环调用accept()方法接受客户程序的连接。(2)客户程序模块 客户通过Socket(InetAddress,port)建立与服务器的连接。服务器与客户都通过构造ObjectInputStream,ObjectOutputStream来建立输入输出流,然后双方通过该输入输出流来相互传递信息,一旦收到客户方的连接请求,服务器accept()方法返回一个新建的Socket对象。客户端然后向服务器发送消息,比如文件传输等,服务器收到来自客户的请求后,针对不同的消息处理请求。2.4 需求分析 聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。首先来看一下服务器端的任务: 服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户端连接或者断开连接(包括判断没有响应的连接超时)。服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。 3. 服务器应当建立一个用户账号的数据库,用于管理用户资料。 4. 服务器应当能存有所有用户的公钥,以及所有加密过后的聊天记录,当用户需要时便于验证信息内容。(图2.2 服务器的主要功能图) 如上图就是服务器端最主要的几个任务。不难看出,服务器端的任务并不复杂。客户端应该完成的工作包括: 与服务器端建立通信通道,向服务器端发送信息。(包过用户资料注册、用户登录、群聊、用户间私聊等各种消息)接收来自服务器的信息。根据消息的内容进行操作,如抬出各种对话框、确认信息等。(图2.3 客户端的主要功能图)相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述几个个问题,即完成了该聊天系统的核心。2.5 聊天系统的总体设计要点 聊天系统的设计跟普通软件设计有着许多不同的地方,普通软件设计所考虑的因素,例如,普通软件需要对布局进入大量美化以及优化设计等等,而聊天工具只要提供满足用户直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点: 1、实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。 2、服务器端工作流程(图2.4 服务器主要运行流程图)(图2.5 服务器的界面功能图)1. 服务器先创建一个client数组,用来存放id、连接用户的名字、地址等,每个用户对应一个client线程。同时连接用户数据库。2. 对服务器本地端口(程序里默认是6868)进行监听,当收到客户连接请求后,接收用户发来的信息,这里将消息进行分段后进行2种不同操作。第一种是注册请求,继续接受用户名、密码等信息,然后查询数据库,判断是否已经注册,未注册则插入用户信息,返回成功信息给客户端。已注册则返回失败消息。执行完后回到流程1。第二种是登录请求,继续接受客户端发来的用户名和密码,查询数据库看是否有相同记录,没有则返回一个失败信息给客户端,然后回到流程1。若是用户名和密码都正确,则返回成功信息给客户端。3. 服务器将客户的ID、用户名、地址存到一个空的client,然后启动该用户的数据接受发送线程。然后返回流程1。4. Client线程启动后一直循环接受信息,直到收到该客户端发来消息。根据消息的标识符判断是群发还是一对一单聊,群发则所有的client线程将消息发回客户端。如果是一对一单聊,则查找client数组的用户名,找到相应的客户,使用该用户的对应线程发回该信息。如上服务器还有一些其他操作,如,更新在线用户列表、发送在线用户列表给客户端,查看数据库资料,对数据库资料进行插入、修改、删除等、还有聊天记录的保存打开等。(为了安全起见,这里的聊天记录都是用户用自己私钥加密过的,服务器没法解密,但是可以为用户发生争端或者需要时提供记录,让用户自己解密验证)3、客户端工作流程客户端程序相对与服务器来说要简单一些:(图2.6 客户端主要界面功能图)(图2.7 客户端接受消息线程主要功能图)1. 显示登录界面,这里可以选择注册用户,用户登录,修改服务器ip以及端口等(默认是本机ip,端口是6868)。选择注册进入流程2,选择登录进入流程32. 显示注册界面,这里要输入用户名,密码,email等,对用户名的要求有不为空以及不含毕设字样即可。2次密码需要一致。点击发送将信息发给服务器,接受服务器返回信息,成功失败均有相应的对话框弹出。3. 发送登录用户名和密码,接受服务器发回信息,成功进入流程4,失败则返回流程1。4. 关闭打开界面,显示对话界面,同时启动一个专门接受服务器信息的线程。这里可以发送群聊消息,以及显示你接受的消息。双击在线用户列表的某一用户,弹出相应的单聊窗口,可以进行一对一聊天。客户端同样有自动更新在线用户,保存聊天记录等功能。第三章 系统设计与实现3.1 开发环境与工具 基于JAVA聊天系统的设计主要运用JAVA与语言与Socket类结合而开发。其开发的主要环境包括: 服务器端:(Windows平台)首先应有java环境jdk,建议采用jdk1.6以上,另外还需配置classpath环境变量,需要有一个access的数据库,配置好odbc的数据源。数据源命名为kangxi。access数据库里建立一个user表用来存储用户账号信息。User表有7列,均为文本类型,分别是name,password,email,ans,创建登录时间,最后登录时间,账号状态。 客户端:只要有java环境jdk就可以,建议jdk1.6。3.2 硬件环境本系统运行环境所需用到的环境为:硬件配置 :中央处理器(CPU) :P4 2.0G的处理器;硬 盘:40GB以上硬盘;内 存:512 DDR内存;显示器:15寸显示器等;显 卡:128M显存显卡软件环境:WINDOWS XP、ACCESS数据库、jdk1.6.03等。3.3 各个功能模块的具体实现3.3.1 服务器的具体实现1. 用户注册、登录、密码找回服务器监听端口,接收到客户端请求后,接受类别信息。String str = din.readUTF();chuli(str, dos);调用chuli(String str, DataOutputStream dos)方法处理消息String tname = str.substring(0, str.lastIndexOf(毕设);String message4 = str.substring(str.lastIndexOf(毕设) + 2); 这里的tname有3种值:第一种表示用户发出注册请求,message4则为具体的所有注册消息,服务器收到都连接服务器,查询是否已有该用户名的账号,没有则将message4的值根据标识符分段,然后插入数据库,返回成功信息,反之亦然;第二种表示用户发出密码找回请求,message4为用户输入的密码找回答案,服务器连接数据库,查询是否存在该用户名和答案匹配的记录,成功则将密码发回给用户,反之则发挥失败消息。dos.writeUTF(ok!+毕设+rs.getString(1);这里的rs为查询数据库的返回结果;第三种用户登录请求,message4为用户密码,服务器收到后连接数据库,判断用户信息是否正确,将结果返回给客户端,当结果为成功时服务器继续向下运行,失败则回到监听端口的地方。2. 客户端线程的存储服务器为了能有效的处理各个用户的请求,创建了一个客户线程数组public static Client user = new Client200;然后根据Client的定义用连接服务器端口的客户端的编号、用户名、输入流、输出流创建对象,启动线程,最后返回继续监听端口。usersum = new Client(sum, Server.message1, dos, din); 创建与客户对应的通信线程new Thread(usersum).start();启动发送数据到客户端线程3. 服务器中各个客户端通信线程首先当客户线程启动时调用刷新在线用户的方法:Server.rid();当服务器中接受客户端消息线程收到消息后,先进行预处理String tname = str.substring(0, str.lastIndexOf(标识符);String message = str.substring(str.lastIndexOf(标识符) + 3);将消息的对象和消息的具体内容提取出来,然后根据对象的值来判断客户端的请求种类。if (tname.equalsIgnoreCase(exit)当tname值为exit时,表示客户端下线了。此时服务器就要将play中该客户端的用户名删去,同时调用刷新在线用户列表的方法rid()。if (tname.equalsIgnoreCase(all),当tname值为all时,表示这条消息是发给所有人的,服务器于是调用所有的在线用户线程,将消息发给去。for (int i = 0; i m; i+) mess = this.name + 对所有人说n + message;Server.useri.dos.writeUTF(mess);这里的this.name是发出消息人的名字。当tname的值不为exit和all时,表示这条消息是私聊的消息,而且tname是接受客户端的用户名。此时要先找到接受用户端的线程,然后才发回消息。for (int i = 0; i 数据源 里面添加数据源。在程序需要连接数据库时Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);con = DriverManager.getConnection(jdbc:odbc:kangxi, , );这是连接数据库的驱动以及连接数据源的用户名和密码。String sqlstring = SELECT * FROM user ;java.sql.PreparedStatement ps = con.prepareStatement(sqlstring);rs = ps.executeQuery();这里的sqlstring用来存储数据库语言,然后SQL语句对数据库查询操作将返回一个ResultSet对象。如果是插入以及更新数据库则不需要返回值,只需要更新数据库即可。rs = ps.executeQuery();这里即表示对数据库的操作进行更新。7. 对用户账号的基本操作点击菜单栏的用户资料管理选项,弹出账号处理窗口,服务器连接数据库,然后将所有的用户信息显示到窗口的中间String sqlstring = SELECT * FROM user; PreparedStatement ps = con.prepareStatement(sqlstring);rs = ps.executeQuery();rs即为所有用户信息在窗口菜单栏可以选择具体的操作,如新建账号、删除账号、查找账号、修改账号、退出管理等。关闭时断开与数据库的连接。3.3.2客户端的具体实现1. 连接服务器的设置 点击设置,可以设置连接服务器的ip地址和端口,只有知道了服务器的ip以及开放端口才能正确连接服务器。2. 用户账号注册点击注册,弹出注册窗口,填写用户的基本信息,这里要求用户名不准为空,并且不能含标识符,因为程序很多地方需要用标识符来分段信息。密码2词输入要一致,密码找回答案不为空。当输入完后,点注册,客户端将信息发送给服务器str=na1+标识符1+na2+标识符2+na3+标识符3+na4;mess=标识符4+标识符0+str; dos.writeUTF(mess);na1-na4为用户信息,标识符0-标识符3起分隔作用,标识符4表示这条消息是注册消息。然后接受服务器返回的结果,弹出相应的对话窗提示用户结果。3. 密码找回功能 点击密码找回,弹出密码找回窗口,输入账号以及密码找回问题的答案,将信息用标识符组合发给服务器,然后接受服务器的返回信息,返回标识符为ok则填出窗口显示用户名以及密码,失败则提示输入信息不正确。4. 登录账号 输入用户名和密码后点登陆,将信息发给服务器,接受服务器返回结果,ok则关闭当前窗口打开对话窗口,失败则提示用户名密码不正确。5. 客户端接受信息线程当客户端登录后,创建一个专门负责处理服务器发来消息的线程,循环接受消息。这里接收到的消息根据分隔符有3种:第一种分隔符表示这条消息是刷新在线用户列表的,则清空用户列表,然后将信息分段截取后的结果插入列表;第二种分隔符表示消息是群聊消息,则在消息显示文本区域显示。displayarea.append(str+nn); displayarea.setCaretPosition(displayarea.getText().length();这里的作用是滚屏displayarea是文本区域;第三种分隔符是表示这是一对一单聊的消息,将消息根据分隔符截取,得到消息的发送人,查找是否已经有与该用户私聊的对话框,没有则弹出与该用户私聊的对话框,并显示本条消息。如果已经有与该用户私聊的对话框,则追加显示本条信息。6. 与在线用户私聊 双击在线用户列表中的用户名,弹出与该用户私聊的对话窗口,在此次上线过程中这个对话窗口都将负责与该用户的私聊,即使关闭了,该对话框也只是隐藏起来。7. 聊天记录的保存点击界面的保存记录按钮,调用保存记录方法。File a1=new File(fname+.txt);if(!a1.exists() a1.createNewFile(); 将显示区域的消息存以追加的方式写入到客户端目录下的以登录用户名命名的文件,然后清空消息显示区域的文字。点击菜单栏的打开记录选项,弹出一个对话框,打开客户端目录下以登录用户名命名的文件,将内容显示在对话框,当无文件时显示为空。3.3.3 组员的加密实现同组的另一位同学将在我完成的模块基础上加入安全加密,大概功能有:当用户注册时自动生成用户的RSA公私密钥,保存在用户端,将公钥发给服务器;每当用户发信息时想用des加密消息,再用私钥加密对称密钥。达到对消息签名的目的;服务器只能看到群聊的消息,而私聊的消息显示的是加密过后的乱码,这是为了保护用户的隐私,同时当用户需要聊天记录时可以发回给用户解密验证。3.4 功能模块的测试 本次毕设的编译环境,及编写平台为java。主要用到的类为包中的Socket类和javax.swing包中的类。(图3.1 服务器主界面) 图3.1为服务器开始界面,下方各个用户信息显示区域,右侧有一个在线用户列表(当有用户登录退出时都会更新,同时发送更新消息给所有客户端)。保存记录按钮可以将信息存到服务器本地,可以通过file菜单里面的打开记录进行查看。File菜单里面可以选择账号数据管理。(图3.2 服务器账号管理主界面) 图3.2即为用户资料管理界面,下方显示所有注册用户的基本信息,操作菜单里面可以选择对数据库进行插入,修改,删除,查询等操作。 服务器线程在程序运行期间一直有效,接受客户端请求信息,转发客户端聊天内容,查看用户信息。(图3.3 客户端登陆界面)客户端运行时必须先登陆,登陆界面如图三,这里可以选择登录账号,注册用户,密码找回,修改连接服务器ip以及端口等。(图3.4 客户端注册界面)图3.4为用户注册界面,这里要填写用户的基本资料,当你用户名为空或者包含毕设字样时会有对话框提示。注册成功还是失败都会有提示。如下:(图3.5 注册时的各种提示)(图3.6 密码找回界面)图3.6为密码找回的界面,需要输入注册时填写的密码找回答案,正确的话会弹出如图3.7的对话框。(图3.7 密码找回结果界面)(图3.8 客户端聊天主界面) 图3.8为用户聊天主界面,左上方为聊天记录区域,左下方为用户发送信息区域,右上方为在线用户列表。双击用户名会弹出一对一窗口如下图3.9.(图3.9 客户端用户间私聊界面) 上图中窗口sissi是用户kangxi双击sissi用户后弹出的界面,输入消息后,在用户sissi的电脑上就会弹出窗口kangxi显示刚刚kangxi发给sissi的消息。(图3.10 客户端聊天记录) 图3.10为用户打开聊天记录是弹出的窗口。本聊天工具的所有一对一消息都是经过加密的如下图(图3.11 服务器可见消息图) 服务器只能看到群聊的明文,私聊只能看到加密过后的消息。第四章 总结4.1 毕业设计总结与展望 本毕业设计实现了简单的实时聊天功能,经过细心的调试和排错解决了绝大部分的问题。但几乎每一个计算机程序都会有这样那样的不足,尤其是未经过精心维护的非商业软件。本聊天系统程序对于初涉此领域的毕业设计课题来说,尤其在开始初期,感觉逻辑复杂,难以控制,因此至今还有许多未能解决的缺陷。 目前本聊天系统还有待完善的功能:聊天系统缺乏好友列表;没有实现文件发送功能;没有办法发送图片等。 尽管毕业设计到现在已接近尾声,但是对于上述的缺陷,本人还会不断对聊天系统进一步的完善它,期望在今后的日子里凭借自身的技术把系统做成一套深受欢迎的聊天系统。4.2 经验与感想 基本JAVA的网络安全聊天工具的开发与实现作为毕业设计,是本人目前做过的最大的程序。 平时自己也常用各种聊天工具进行聊天,因此,自己也曾想过以后学会了电脑就一定亲自设计一款聊天工具,如今,总算实现了自己的梦想。基本JAVA聊天系统设计与实现毕业设计正是建立在Java平台上,是本人以前未曾接触过的领域。凭着探索新知识的热情,我选择了该设计题目。 学习该平台背景和功能的时间远远超出了我想象的时间。在设计初期,为了画出一个简单的图形,都需要花一定的时间去掌握和熟悉。为了进一步探索深层次的技巧,我花费了大量时间在sun的Java主页上,阅读了十几篇技巧和代码样例。在学习期间,本人还通过网上的各种JAVA源码进行学习与研究,我原以为这样的设计水平将无法完成毕业设计,但当掌握了大部分应用技巧时,剩下的聊天系统思路的设计就显得不是最大的障碍了。 我在一个月内写完这个程序,经过了很多次的调试,终于完成了现在的程序。原先认为不可能的事,我发现,如果有不畏困难的信心和肯钻研的勇气,就一定会完成,甚至达到意想不到的效果。致谢语 紧张而忙碌的毕业设计就要结束了,在完成了系统的功能设计后,我感到由衷的喜悦和自豪。在我做毕业设计期间,许多老师,同学和朋友给我无私的关怀和帮助,在此,我要向他们表示衷心的感谢。 首先,我要感谢学校的老师在毕业设计期间给了我悉心的关怀与帮助,并且给了我许多关键的,建设性的指导。 这次的毕业设计让我受益匪浅。可以这样说,用计算机来解决繁重而低效的手工管理工作,计算机发展史上的必然。在理论课的学习中,我掌握了基础课和专业课的理论知识,也曾经做过一些程序设计的联系和计算机综合试验,但真正动手设计一个管理软件,还是第一次。在这次的毕业设计中,我曾遇到了许多困难,而在克服这些困难的过程中,我的各方面的能力又有了很大的提高,使我的理论知识更好的与实践相结合,增强了专业技能的可实践性。从调研,需求分析到查找资料,结构设计,详细设计以及调试程序,到最后的写使用说明书,我终于设计出了一个比较完整的,周密的,可使用的聊天系统。通过这次的毕业设计,我真正了解了软件工程设计的整个过程,既巩固了以前的理论知识,也为我以后的工作奠定了良好的基础。 当然,由于时间的短促,我所完成的系统并不是尽善尽美的,还有待进一步的修改和完善。最后,请允许我再一次向毕业期间无私帮助过我的老师,同学和朋友表示最衷心的感谢。参考文献1 (美)David M.Geary,李建森,蒋欣军.JAVA2图形设计卷2:SWING M. 北京: 机械工业出版社, 2000.2(美)Bruce Eckel , 侯捷 . Java编程思想(第2版) M.北京: 机械工业出版社, 2002.3(美)Elliotte Rusty Harold , 朱涛江, 林剑 . Java网络编程(第三版)M.北京:中国电力出版社,2005.4 耿祥义,张跃平.Java大学实用教程(第二版)M.北京:电子工业出版社,2009.g an employment tribunal claimEmployment tribunals sort out disagreements between employers and employees.You may need to make a claim to an employment tribunal if: you dont agree with the disciplinary action your employer has taken against you your employer dismisses you and you think that you have been dismissed unfairly.For more information about dismissal and unfair dismissal, seeDismissal.You can make a claim to an employment tribunal, even if you haventappealedagainst the disciplinary action your employer has taken against you. However, if you win your case, the tribunal may reduce any compensation awarded to you as a result of your failure to appeal.Remember that in most cases you must make an application to an employment tribunal within three months of the date when the event you are complaining about happened. If your application is received after this time limit, the tribunal will not usually accept it.If you are worried about how the time limits apply to you, take advice from one of the organisations listed underFurther help.Employment tribunals are less formal than some other courts, but it is still a legal process and you will need to give evidence under an oath or affirmation.Most people find making a claim to an employment tribunal challenging. If you are thinking about making a claim to an employment tribunal, you should get help straight away from one of the organisations listed underFurther help.If you are being represented by a solicitor at the tribunal, they may ask you to sign an agreement where you pay their fee out of your compensation if you win the case. This is known as adamages-based agreement. In England and Wales, your solicitor cant charge you more than 35% of your compensation if you win the case.If you are thinking about signing up for a damages-based agreement, you should make sure youre clear about the terms of the agreement. It might be best to get advice from an experienced adviser, for example, at a Citizens Advice Bureau. To find your nearest CAB, including those that give advice by e-mail, click onnearest CAB.For more information about making a claim to an employment tribunal, seeEmployment tribunals.The (lack of) air up there Watch mCayman Islands-based Webb, the head of Fifas anti-racism taskforce, is in London for the Football Associations 150th anniversary celebrations and
展开阅读全文