1、基于java的聊天系统客户端+服务器课程设计答辩记录教师主要提问记录学生回答问题情况课程设计成绩评定答辩成绩(50%)课程设计报告撰写质量(50%)总分是否同意通过同意 不同意答辩小组成员签名: 年 月 日封面成都信息工程学院课程设计基于JAVA的聊天系统的设计与实现作者姓名:王时成班 级:网络094班学 号:2009121150指导教师:曾令明日 期:2011年 12月 12 日 作者签名:基于JAVA的聊天系统的设计与实现摘 要随着互联网的快速发展,网络聊天工具已经作为一种重要的信息交流工具,受到越来越多的网民的青睐。目前,出现了很多非常不错的聊天工具,其中应用比较广泛的有Netmeeti
2、ng、腾讯QQ、MSN-Messager等等。与此同时,也造成了很多的问题,比如员工上班聊QQ等等,为了防止这类事件,并且利用企业部门和部门之间,员工和员工之间以及员工与部门之间的交流,需要企业拥有自己的一套交流系统。该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。后者通过与服务器建立连接,来进行客户端与客户端的信息交流。其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Cli
3、ent/Server模式)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用MyEclipse为基本开发环境和java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,直到形成可行系统关键词:局域网 聊天 socket java目 录1引言 11.1课题背景 11.2 本文的主要工作 12 聊天系统的需求分析以及开发工具 12.1系统目标 12.2系统具备的基本功能 12.3开发环境及工具 22.3.1开发环境 22
4、.3.2JAVA语言介绍 22.3.3TCP/IP协议介绍 62.3.4Socket简介 63系统总体结构设计 83.1基本简介 83.2系统功能模块设计 83.2.1数据库设计 83.2.2 ER图 103.2.3功能模块介绍 104系统流程与实现 124.1系统设计流程 124.2页面详细介绍 125系统测试与分析 165.1测试 165.2测试中遇到的问题 16结 论 17参考文献 171引言1.1课题背景根据当前网络的需求,网络聊天越来越受各种网民所青睐。因此开发网络聊天是相当有必要,而且在网站内增加聊天功能,它不仅可以提高网站的访问量,同时可以留着访客,更重要的是让访客透过聊天室实时
5、的互相交流。而本人也学习过JAVA语言,对网络编程也较有兴趣,为了更好的考验自己对JAVA语言的掌握程度,本人就决定以基于JAVA聊天系统的设计与实现为软件设计,希望通过这一次的能进一步提高本人的网络开发编程的能力。1.2 本文的主要工作本文是对本次开发从构思到实现,再到测试整个开发过程中的环节进行描述的文档,提供给开发人员使用,能够理清思路。同时,也可以提供给其他人员,交流更加清楚。2 聊天系统的需求分析以及开发工具2.1系统目标聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时
6、聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:1、实现思想在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。2、服务器端工作流程服务器端通过socket()系统调用创建一个Socket数组后(即设定了接受连接客户的最大数目),与指定的本地端口绑定bind(),就可以在端口进行侦听listen()。如果有客户端连接请求,则在数组中选择一个空Socket,将客户端地址赋给这个Socket。然后登
7、录成功的客户就可以在服务器上聊天了。3、客户端工作流程客户端程序相对简单,只需要建立一个Socket与服务器端连接,成功后通过这个Socket来发送和接收数据就可以了。2.2系统具备的基本功能1)服务器端服务器端应具备的以下的功能1、开启/关闭服务;2、查看在线的用户;3、向全公司或者指定部门发送系统消息;4、部门管理(包括增删改查);5、用户管理(包括增删改查);6、日志查看;2)客户端客户端具备以下功能1、登录服务器;2、修改密码;3、查看系统消息、部门消息以及好友消息(包括离线消息);4、查看所有用户(包括离线用户);5、聊天功能;6、退出登录;2.3开发环境及工具2.3.1开发环境主要
8、开发工具:MyEclipse 9.0 +SQL 2008辅助开发工具:ERstido 8.0、Viso 20032.3.2JAVA语言介绍(一)JAVA的主要特点Java语言有下面一些特点:简单、面向对象、分布式、解释执行、鲁棒、 安全、体系结构中立、可移植、高性能、多线程以及动态性。1.简单性Java语言是一种面向对象的语言,它通过提供最基本的方法来完成指定的任务,只需理解一些基本的概念,就可以用它编写出适合于各种情况的应用程序。Java略去了运算符重载、多重继承等模糊的概念,,且通过实现自动垃圾收集大大简化了程序设计者的内存管理工作。另外,Java也适合于在小型机上运行,它的基本解释器及类
9、的支持只有40KB左右,加上标准类库和线程的支持也只有215KB左右。库和线程的支持也只有215KB左右。2.面向对象Java语言的设计集中于对象及其接口,它提供了简单的类机制以及动态的接口模型。对象中封装了它的状态变量以及相应的方法,实现了模块化和信息隐藏;而类则提供了一类对象的原型,并且通过继承机制,子类可以使用父类所提供的方法,实现了代码的复用。3.分布性Java是面向网络的语言。通过它提供的类库可以处理TCP/IP协议,用户可以通过URL地址在网络上很方便地访问其它对象。4.鲁棒性Java在编译和运行程序时,都要对可能出现的问题进行检查,以消除错误的产生。它提供自动垃圾收集来进行内存管
10、理,防止程序员在管理内存时容易产生的错误。通过集成的面向对象的例外处理机制,在编译时,Java提示出可能出现但未被处理的例外,帮助程序员正确地进行选择以防止系统的崩溃。另外, Java在编译时还可捕获类型声明中的许多常见错误,防止动态运行时不匹配问题的出现。5.安全性用于网络、分布环境下的Java必须要防止病毒的入侵。Java不支持指针, 一切对内存的访问都必须通过对象的实例变量来实现,这样就防止程序员使用 “特洛伊”木马等欺骗手段访问对象的私有成员,同时也避免了指针操作中容易 产生的错误。6.体系结构中立Java解释器生成与体系结构无关的字节码指令,只要安装了Java运行时系统,Java程序
11、就可在任意的处理器上运行。这些字节码指令对应于Java虚拟 机中的表示,Java解释器得到字节码后,对它进行转换,使之能够在不同的平 台运行。7.可移植性与平台无关的特性使Java程序可以方便地被移植到网络上的不同机器。 同时,Java的类库中也实现了与不同平台的接口,使这些类库可以移植。另外,Java编译器是由Java语言实现的,Java运行时系统由标准C实现,这使得Java 系统本身也具有可移植性。8.解释执行Java解释器直接对Java字节码进行解释执行。字节码本身携带了许多编译时信息,使得连接过程更加简单。9.高性能和其它解释执行的语言如BASIC不同,Java字节码的设计使之能很容易
12、地直接转换成对应于特定CPU的机器码,从而得到较高的性能。10.多线程多线程机制使应用程序能够并行执行,而且同步机制保证了对共享数据的正确操作。通过使用多线程,程序设计者可以分别用不同的线程完成特定的行为,而不需要采用全局的事件循环机制,这样就很容易地实现网络上的实时交互行为。11.动态性Java的设计使它适合于一个不断发展的环境。在类库中可以自由地加入 新的方法和实例变量而不会影响用户程序的执行。并且Java通过接口来支持多重继承,使之比严格的类继承具有更灵活的方式和扩展性。(二)JavaApplet Java语言的特性使它可以最大限度地利用网络。Applet是Java的小应 用程序,它是动
13、态、安全、跨平台的网络应用程序。JavaApplet嵌入HTML语言,通过主页发布到Internet。网络用户访问服务器的Applet时,这些Applet 从网络上进行传输,然后在支持Java的浏览器中运行。由于Java语言的安全机制,用户一旦载入Applet,就可以放心地来生成多媒体的用户界面或完成复杂的计算而不必担心病毒的入侵。虽然Applet可以和图像、声音、动画等一样从网络上下载,但它并不同于这些多媒体的文件格式,它可以接收用户的输入,动态 地进行改变,而不仅仅是动画的显示和声音的播放。(三)丰富的类库Java提供了大量的类以满足网络化、多线程、面向对象系统的需要。1.语言包提供的支持
14、包括字符串处理、多线程处理、例外处理、数学函 数处理等,可以用它简单地实现Java程序的运行平台。2.实用程序包提供的支持包括哈希表、堆栈、可变数组、时间和日期等。3.输入输出包用统一的流模型来实现所有格式的I/O,包括文件系统、 网络、输入4.低级网络包用于实现Socket编程。5.抽象图形用户接口包实现了不同平台的计算机的图形用户接口部件, 包括窗口、菜单、滚动条、对话框等,使得Java可以移植到不同平台的机器。6.网络包支持Internet的TCP/IP协议,提供了与In-ternet的接口。 它支持URL连接,WWW的即时访问,并且简化了用户/服务器模型的程序设计。(四)Java和C、
15、C+对于变量声明、参数传递、操作符、流控制等,Java使用了和C、C+ 相同的传统,使得熟悉C、C+的程序员能很方便地进行编程。同时,Java为 了实现其简单、鲁棒、安全等特性,也摒弃了C和C+中许多不合理的内容。1.全局变量Java程序中,不能在所有类之外定义全局变量,只能通过在一个类中定 义公用、静态的变量来实现一个全局变量。例如:ClassGlobalVar public static global_var; 在类GlobalVar中定义变量global_var为public static,使得其它类 可以访问和修改该变量。 Java对全局变量进行了更好的封装。而在C和C+中,依赖于不加
16、封装 的全局变量常常造成系统的崩溃。2.GotoJava不支持C、C+中的goto语句,而是通过例外处理语句try,Catch, final等来代替C、C+中用goto来处理遇到错误时跳转的情况,使程序更可读 且更结构化。 3.指针指针是C、C+中最灵活,也是最容易产生错误的数据类型。由指针所进行 的内存地址操作常会造成不可预知的错误,同时通过指针对某个内存地址进行显 式类型转换后,可以访问一个C+中的私有成员,从而破坏安全性,造成系统的 崩溃。而Java对指针进行完全的控制,程序员不能直接进行任何指针操作,例如 把整数转化为指针,或者通过指针释放某一内存地址等。同时,数组作为类在Java 中
17、实现,良好地解决了数组访问越界这一C、C+中不作检查的错误。4.内存管理在C中,程序员通过库函数malloc()和free()来分配和释放内存,C+ 中则通过运算符new和delete来分配和释放内存。再次释放已释放的内存块或 未被分配的内存块,会造成系统的崩溃;同样,忘记释放不再使用的内存块也 会逐渐耗尽系统资源。而在Java中,所有的数据结构都是对象,通过运算符new 为它们分配内存堆。通过new得到对象的处理权,而实际分配给对象的内存可能 随程序运行而改变,Java对此自动地进行管理并且进行垃圾收集,有效防止了由 于程序员的误操作而导致的错误,并且更好地利用了系统资源。5.数据类型的支持
18、在C、C+中,对于不同的平台,编译器对于简单数据类型如int,float 等分别分配不同长度的字节数,例如:int在IBMPC中为16位,在VAX-11中为 32位,这导致了代码的不可移植性,但在Java中,对于这些数据类型总是分 配固定长度的位数,如对int型,它总占32位,这就保证了Java的平台无关性。6.类型转换在C、C+中,可以通过指针进行任意的类型转换,常常带来不安全性, 而Java中,运行时系统对对象的处理要进行类型相容性检查,以防止不安全的 转换。7.头文件C、C+中用头文件来声明类的原型以及全局变量、库函数等,在大的系 统中,维护这些头文件是很困难的。而Java不支持头文件,
19、类成员的类型和访 问权限都封装在一个类中,运行时系统对访问进行控制,防止对私有成员的操作。同时,Java中用import语句来与其它类进行通讯,以便使用它们的方法。8.结构和联合C、C+中的结构和联合中所有成员均为公有,这就带来了安全性问题。 Java中不包含结构和联合,所有的内容都封装在类中。9.预处理C、C+中用宏定义来实现的代码给程序的可读性带来了困难。在Java中不支持宏,它通过关键字final来声明一个常量,以实现宏定义中广泛使 用的常量定义1.1.3 JAVA语言在网络上的应用Java程序可以获取网络上结点的图象、声音、HTML文档及文本等资源,并可以对获得的资源进行处理。例如Ja
20、va程序可以每隔一定时间读取某结点提供的最新数据,并以图表的形式显示出来。在编程处理上,一般先生成一个URL类型的对象,然后用 Java中相应的方法(method)获取该对象所代表的资源。下面列举一个Java从网络上获取图象的的方法以说明。Java Applet可以直接从网络上结点获取图象并显示出来,Java提供了如下方法可以创建对应于其他结点的图象:getImage(new URL(字符串)其使用格式可有两种:String url = “结点URL”;Image image;try image = getImage(new URL(url);catch(Exception e) System
21、.out.println(“Cant open the URL “); 或URL imgur=null;Image image;try imgur=new URL(“结点URL “);catch (MalformedURLException e) System.out.println(“Cant open the URL “); image=getImage(imgur);前一种格式用“new URL(url)”生成 URL 对象, 并直接作为getImage的参数,后一种格式先用“new URL(url)”生成一个 URL对象,再传给getImage,两种格式本质上是一样的。 以上仅是Jav
22、a在客户端应用的一些方面,目前,Java更广泛的应用是在服务器端。1.2 JavaBeans技术什么是JavaBeans?JavaBeans就是Java的可重用组件技术。ASP通过COM来扩充复杂的功能,如文件上载、发送email以及将业务 处理或复杂计算分离出来成为独立可重复利用的模块。JSP通过JavaBeans实现了同样的功能扩充。JSP对于在Web应用中集成JavaBeans 组件提供了完善的支持。这种支持不仅能缩短开发时间(可以直接利用经测试和可信任的已有组件,避免了重复开发),也为JSP应用带来了更多的可伸缩性。 JavaBeans组件可以用来执行复杂的计算任务,或负责与数据库的交
23、互以及数据提取等。在实际的JSP开发过程中,读者将会发现,和传统的ASP或 PHP页面相比,JSP页面将会是非常简洁的,由于JavaBeans开发起来简单,又可以利用Java语言的强大功能,许多动态页面处理过程实际上被封 装到了JavaBeans中。2.3.3TCP/IP协议介绍(1)IP、TCP协议的特点:TCP/IP(Transmission Control Protocol/Internet Protocol)是传输控制协议/网际协议的缩写, TCP/IP是当今网络互联的核心协议。TCP/IP协议的体系结构共有四个层次,即应用层、传输层、网络互联层和网络接口层。IP协议的作用:第一,它是
24、网络层的协议,提供互联网上数据传输的统一格式。第二,提供不可靠的无连接的服务。第三,定义了互联网上的传输数据的基本单元,提供了供路由选择的信息,没有差错校验和处理的机制。TCP协议的功能:差错控制可靠性、面向连接、分段(Segment)、端口号。TCP是传输控制协议,是面向连接的提供了一种可靠的传输服务,它用三次握手和滑动窗口机制来保证传输的可靠性,及进行流量控制。 TCP/IP协议具有以下特点:1、 协议标准具有开放性,其独立于特定的计算机硬件及操作系统,可以免费使用。2、 统一分配网络地址,使得每个TCP/IP 设备在网络中都具有唯一的IP地址。3、 实现了高层协议的标准化,能为用户提供多
25、种可靠的服务。(2)TCP/IP协议进行传输数据传输的过程:应用程序为了传输数据会调用TCP,将数据和对应的参数传给TCP,将TCP 数据包封装在IP包内,通过网络送给目的TCP。接收方TCP在接收到数据后通知上层应用程序,TCP将保证接收数据的正确性。在实现TCP的主机上,TCP可以被看成是一个模块,和文件系统区别不大,TCP 也可以调用一些操作系统的功能,TCP不直接和网络打交道,控制网络的任务由专门的设备驱动模块完成。TCP只是调用IP接口,向TCP提供所有TCP需要的服务。(3)端口号:有的时候,一个ip地址不能完整的标识一台服务器,这是应为一台物理性的计算机同时运行着多个应用程序,这
26、就需要我们来区别同一台机子上的不同的服务,所以就在传输层和应用层上设置接口,就是 端口。端口实际是一个16位长的 地址,他的范围是065535之间,其中01023是熟知端口,主要是给提供服务的应用程序使用,这些端口是所有应用进程都只道的,102465535为一般端口,也称动态端口、连接端口,用来随时分配要求通信的个客户端应用程序。在数据传输过程中,各种服务器不断的检测分配给他的端口,一边发现要求和他通信的客户端。2.3.4Socket简介Socket,简称套接字,用于实现网络上客户和服务器之间的连接。也就是说网络上两个或两个以上双工方式通信的进程之间总有一个连接,这个连接的端点成为套接字,套接
27、字是在比较低的层次上通信的。具体的说:一个服务器应用程序一般侦听一个特定的端口等待客户端的连接请求,当一个连接请求到达时,客户端和服武器端建立一个通信连接,在连接过程中,客户端被分配一个本地端口与一个socket建立连接,客户端通过写socket来通知服务器,以读socket中的信息,类似的服务器也获得一个本地端口,它需要一个新的端口号来侦听原始端口上的其他连接请求。服务器也通过它的本地端口连接一个socket,通过读写和客户端通信。Socket程序的工作过程:1、建立Socket连接:在通信开始之前由通信双方确认身份,建立一条专用的虚拟连接通道。2、数据通信:利用虚拟连接通道传送数据信息进行
28、通道。3、关闭:通信结束时,再将所建的虚拟连接拆除。具体如下:服务器 三次握手:第一次握手:原主机发送一个带有本次连接的序号的请求的一个数据帧第二次握手:目的主机收到请求后,如果同意连接,则发回一个带有一个本次连接序号和源端机连接序列号的确认。第三此握手:源端机收到含有两次初始序列号的应答后,在向目的主机发送一个带有两次连接的序列号的确认。具体过程如下3系统总体结构设计3.1基本简介聊天系统不外乎两个方面,服务器端和客户端。简单分析一下两个方面所要完成的任务,对设计这个程序来说,等于完成了一半。首先来看一下服务器端的任务:服务器端应当建立一个ServerSocket,并且不断进行侦听是否有客户
29、端连接或者断开连接(包括判断没有响应的连接超时)。服务器端应当是一个信息发送中心,所有客户端的信息都传到服务器端,由服务器端根据要求分发信息。以上就是服务器端最主要的两个任务。不难看出,服务器端的任务并不复杂。客户端应该完成的工作包括:与服务器端建立通信通道,向服务器端发送信息。接收来自服务器的信息。相对服务器而言,客户端的任务更加简单,有了以上的简单分析,可以知道,解决上述四个问题,即完成了该聊天系统的核心。3.2系统功能模块设计3.2.1数据库设计1)用户表设计字段名字段类型长度是否能为空备注用户IDVarchar6否主键,PK用户名Varchar50用户名用户密码Varchar100登录
30、密码,初始值为0000性别Varchar3性别头像IDInteger年龄Integer电话Varcahr20地址Varchar100注册时间Datetime是否在线Integer所属部门IDVarchar3否外键,FK2)部门表设计字段名字段类型长度是否能为空备注部门IDVarchar3否主键,PK部门名称Varchar50备注Varchar1003)消息表设计字段名字段类型长度是否能为空备注消息IDInteger否主键,PK消息来自Varchar15消息目的Varchar15消息内容Varchar500 消息类型Varchar20消息状态Varchar10消息来自IDVarchar15否外键,FK消息发送时间Varchar30否3.2.2 ER图3.2.3功能模块介绍聊天系统工作原理图(1)服务器程序模块服务器与客户间通过套接口Socket(TCP)连接。在java中使用套接口相当简单,Java API为处理套接口的通信提供了一个类.Socket,使得编写网络应用程序相对容易。服务器采
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1