局域网聊天系统的设计与实现毕业论文.doc_第1页
局域网聊天系统的设计与实现毕业论文.doc_第2页
局域网聊天系统的设计与实现毕业论文.doc_第3页
局域网聊天系统的设计与实现毕业论文.doc_第4页
局域网聊天系统的设计与实现毕业论文.doc_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

局域网聊天系统的设计与实现毕业论文目 录1 绪论11.1引言11.2国内外聊天系统的研究现状21.3 Java语言31.3.1 Java的发展历史31.3.2 Java的特点61.3.3 Java与Internet71.4 Socket编程81.4.1 关于TCP/IP协议81.4.2 服务器和客户机91.5本文内容安排92 需求分析102.1需求102.1.1 可行性分析102.1.2系统功能需求102.1.3 系统性能需求112.1.4 系统运行需求112.2 数据流图112.2.1 顶层数据流图112.2.2 一层数据流图122.2.3 二层数据流图123 概要设计133.1系统实现原理133.2 系统实现层次图:143.3各模块详细功能143.3.1服务器端结构143.3.2 客户端结构153.4 数据库的设计153.5聊天界面设计164 详细设计184.1 系统流程图184.1.1 系统服务器端流程图184.1.2 系统客户端流程图184.2 系统的实现194.2.1 问题陈述194.2.2 解决方案19参考文献28总结29致谢.30局域网聊天系统的设计与实现2007级网络工程 指导教师 【摘要】本文详细介绍了局域网聊天系统的开发和过程,由于现在网络技术发展十分迅速,聊天系统可以方便快捷的解决通讯问题,因此格外受人亲睐。本项目采用软件工程的方法,综合运用数据库技术、程序设计技术、网络技术,以java为开发语言以eclipse开发工具作为系统前台应用程序开发工具。此局域网聊天工具采用客户端/服务器(C/S)模式和TCP连接。在本设计中,用多线程实现了不同的并行任务并进行了人性化的界面设计使用起来更加方便功能合理。最终实现了单人通信,多人通信。该系统操作简单,灵活,稳定。【关键词】多线程 ;客户机/服务器 ;JAVA ; Socket ; Eclipse ; TCP/IPThe design and implementation of the LAN chat system【Abstract】This paper introduces in detail the development and chat systems LAN process, because now network technology is developing very rapidly, and chat system can solve the problem, convenient communication, so extraordinarily popular kiss ignorance. The project adopts the method of software engineering, the integrated use of database technology, program design technology, network technology, eclipse development tool to Java language as a system receptionist application development tools. The LAN chat by client/server tool (C/S) mode and TCP connection. In this design will client and server in a program inside, integrated with multi-thread achieved different parallel task and human interface design use rise more convenient function is reasonable. Finally achieved LAN communications. This system operation simple, flexible and steady.【Key words】multithreading ;Client/server ;JAVA ; Socket ; Eclipse ; TCP/IP山东农业大学学士学位论文1 绪论1.1 引言局域网通讯(Local Network,简称LNLNIM)是指能够即时发送和接收互联网消息等的业务。自2001年面世以来,特别是近几年的迅速发展,局域网通讯功能日益丰富,逐渐集成了电子邮件、博客、音乐、电视、游戏和搜索等多种功能。它不再是一个单纯的聊天工具,已经发展成集交流、资讯、娱乐、搜索、电子商务、办公协作和企业客户服务等为一体的综合化信息平台。是一种终端连往即时通讯网络的服务。它不同于e-mail在于它的交谈是即时的。大部分的即时通讯服务提供了状态信息的特性显示联络人名单,联络人是否在在线与能否与联络人交谈。即时通讯软件是通过即时通讯技术来实现在线聊天、交流的软件。目前有2种架构形式,1、一种是C/S架构,采用客户端/服务器形式,用户使用过程中需要下载安装客户端软件,典型的代表有:QQ、百度HI 、Skype QQ VS GU、Gtalk、新浪UC、MSN等;2、采用B/S架构,即浏览器/服务端形式,这种形式的即时通讯软件,直接借助互联网为媒介、客户端无需安装任何软件,既可以体验服务器端进行沟通对话,一般运用在电子商务网站的服务商,典型的代表有Websitelive 、53KF、live800等。在网络越来越发达的今天,人们对网络的依赖越来越多,越来越离不开网络,由此而产生的局域网通讯软件越来越多,尤其是聊天功能的软件越来越多!例如,国外的ICQ、国内腾讯公司开发的OICQ。基于Java网络编程的强大功能,本次毕业设计使用Java编写一个聊天系统。 一般来说,聊天工具大多数由客户端程序和服务器程序外加服务器端用于存放客户数据的数据库组成,本系统采用客户机/服务器架构模式通过Java提供的Socket类来连接客户机和服务器并使客户机和服务器之间相互通信,由于聊天是多点对多点的而Java提供的多线程功能用多线程可完成多点对多点的聊天,数据库管理系统用SQL Server2000完成并通过JDBC-ODBC桥访问数据库。本系统建立在JAVA平台上,系统的设计使用了面向对象技术和面向对象的设计原则。系统采用C/S结构,客户端与客户端以及客户端与服务器端之间通过Socket传送消息。使用JAVA语言编写,开发工具采用Eclipse。服务器端设计与实现过程中,采用了多线程技术,可以在单个程序当中同时运行多个不同的线程,执行不同的任务。大大增强了程序对服务器资源的利用。聊天系统完成后将可进行多人对多人的聊天,对好友进行添加、删除,对新用户的注册,发送消息、接受消息等等功能。1.2国内外聊天系统的研究现状目前国内外做聊天系统的公司很多,产品也琳琅满目,国内有诸如腾讯QQ、新浪UC、网易泡泡等,国外有著名的MSN(新版改名为Live Messenger)以及跨平台Gaim等。本人取最具代表性的QQ和MSN进行了一些研究,作为我开发聊天系统的准备。腾讯无疑是国内即时通讯市场的霸主,自从99年进入即时通讯领域并迅速占市场之后,其在国内用户数量始终高居榜首,即使近几年面对微软MSN的强大攻势,腾讯QQ的时常占有率依然稳步增长。腾讯的成功与其对QQ的不断创新和完善是分不开的。参考了许多网络上的资料,以及自己通过观察腾讯QQ运行时的各种细节。可以确定腾讯QQ是以多服务器提供服务、服务器总控客户端、客户端之间UDP直连通信的。并且在两个客户端之间不能建立直连的情况下,才由服务器进行中转通信。其模型如图1.1图1.1 腾讯QQ服务器-客户端模型1与腾讯QQ不同,微软的MSN Messenger只使用了TCP作为传输层通信协议,所有客户端与服务器进行连接,然后通过与服务器的TCP连接进行中转通信。其模型如图1.2图1.2 MSN服务器-客户端模型2腾讯使用的模型中,服务器主要处理客户端各种状态的控制,可以极大减轻服务器的处理压力,但其内部协议和实现复杂度都较高。而MSN Messenger所有数据都要经过服务器,服务器压力可想而知(难怪平时很少见到使用MSN进行语音视频聊天的)。综合腾讯QQ和微软MSN Messenger的特点,我打算在我的系统中尝试建立其类似腾讯QQ的服务器-客户端模型,但以单服务器提供服务。1.3 Java语言1.3.1 Java的发展历史从JDK诞生到现在已经有11年的时间了。沧海桑田一瞬间。转眼11年过去了,JDK已经发布了6个版本。在这11年里诞生了无数和Java相关的技术和标准。现在让我们进入时间隧道,重新回到1995年,再来回顾一下Java的发展轨迹和历史变迁。在这个世界上,熟悉Java历史的人非常多,如果要问一个人Java是从哪年诞生的,也许大多数人都会回答是1995年(这个非常好记,因为微软的Windows95也是在这一年发布的)。但事实上Java早在上个世纪90年代初就开始酝酿了。 1991年4月,Sun公司的James Gosling领导的绿色计划(Green Project)开始着力发展一种分布式系统结构,使其能够在各种消费性电子产品上运行。而Green项目组的成员一开始使用C+语言来完成这个项目,由于Green项目组的成员都具有C+背景,所以他们首先把目光锁定了C+编译器,Gosling首先改写了C+编译器,但很快他就感到C+的很多不足,需要研发一种新的语言Java来替代它,一杯飘香的咖啡成为了它的标志。在17 个月后,整个系统完成了,这个系统是更注重机顶盒式的操作系统,不过在当时市场不成熟的情况下,他们的项目没有获得成功,但Java语言却得到了Sun总裁McNealy的赏识。 直至 1994年下半年,由于Internet的迅猛发展和环球信息网 WWW的快速增长,第一个全球信息网络浏览器Mosaic诞生了;此时,工业界对适合在网络异构环境下使用的语言有一种非常急迫的需求;Games Gosling决定改变绿色计划的发展方向,他们对Oak进行了小规模的改造,就这样,Java在1995年的3月23日诞生了!Java的诞生标志着互联网时代的开始,它能够被应用在全球信息网络的平台上编写互动性及强的Applet程序,而1995年的Applet无疑能给人们无穷的视觉和脑力震荡。我们姑且将Java的这段历史称为Java前传吧。其实Java的诞生颇有那么一股“有心栽花花不开,无心插柳柳成阴”的味道。就象当年Unix和它的前身MULTICS系统一样。 到1998年,Java已经走过了3个年头。从JDK1.0到JDK1.1.8。JDK1.x经过了9个小版本的发展,已经初具规模。至此,它已经走出了摇篮,可以去独闯世界了。在1998年12月4日。Sun发布了Java的历史上最重要的一个JDK版本:JDK1.2。这个版本标志着Java已经进入Java2时代。这个时期也是Java飞速发展的时期。在Java2时代Sun对Java进行了很多革命性的变化 ,而这些革命性的变化一直沿用到现在,对Java的发展形成了深远的影响。JDK1.2自从被分成了J2EE、J2SE和J2ME三大块,得到了市场的强烈反响。不仅如此,JDK1.2还对它的API分成了三大类。核心API :由Sun公司制定的基本的API,所有的Java平台都应该提供。这就是我们平常所说的Java核心类库。可选API :这是Sun为JDK提供的扩充API,这些API因平台的不同而不同。 特殊API :用于满足特殊要求的API。如用于JCA和JCE的第三方加密类库。 Java2除了上述的一些改进外,还增加了很多新的特性。其中最吸引眼球的当属Swing了。Swing是Java的另一个图形库。它不但有各式各样先进的组件,而且连组件风格都可抽换。在Swing出现后,很快就抢了AWT的风头。但Swing并不是为取代AWT而存在的,事实上Swing是建立在AWT之上的。就象JFace是建立在SWT之上一样。另外Java2还在多线程、集合类和非同步类上做了大量的改进。从JDK1.2开始,Sun以平均2年一个版本的速度推出新的JDK。在2000年5月8日。Sun对JDK1.2进行了重大升级。推出了JDK1.3。 Sun在JDK1.3中同样进行了大量的改进,主要表现在一些类库上(如数学运算、新的Timer API等)、在JNDI接口方面增加了一些DNS的支持、增加了JNI的支持,这使得Java可以访问本地资源了、支持XML以及使用新的Hotspot虚拟机代替了传统的虚拟机。 在JDK1.3时代,相应的应用程序服务器也得到了广泛的应用,如第一个稳定版本Tomcat3.x在这一时期得到了广泛的应用,WebLogic等商业应用服务器也渐渐被接受。 时间如水、生命如歌。转眼到了2002年。Sun在这一年的2月13日发布了JDK历史上最为成熟的版本:JDK1.4。在进入21世纪以来,曾经在.NET平台和Java平台之间发生了一次声势浩大的孰优孰劣的论战,Java的主要问题就是性能。 因此,这次Sun将主要精力放到了Java的性能上。在JDK1.4中,Sun放言要对Hotspot虚拟机的锁机制进行了改进,使JDK1.4的性能有了质的飞跃。同时由于Compaq、Fujitsu、 SAS、 Symbian、 IBM等公司的参与,使JDK1.4成为发展最快的一个JDK版本。到JDK1.4为止,我们已经可以使用Java实现大多数的应用了。在2005年的Java One开发者大会上,James Gosling作了题为“Java技术下一个10年贡献”的演讲。谈到未来Java的发展时,James Gosling提到了有关Java软件的性能和复杂性问题。鉴于许多机器运行着大量进程的实际情况,人们对线程模型投以越来越多的关注。随着人们对桌面应用的要求越来越高,系统将变得越来越复杂。他指出: “从工程的角度来看,未来10年内我们所面临的最大挑战就是复杂性问题,” James Gosling说, “目前,我们开展了许多工作以解决应用编程接口、语言以及工具中所涉及的复杂性问题。在工具和用户界面(UI)中都会遇到复杂性问题,Java技术设计人员必须处理好大小尺寸调整和国际化的问题。” Sun公司总裁兼首席运营官Jonathan Schwartz先生指出,来自Java社团和IBM等全球技术合作伙伴两方面的支持,乃是Java技术在创新和社会进步上继续发挥重要作用的强有力的标志。技术开放和社团建设降低了技术应用的壁垒,其结果是为参与和增长创造了更多的商机,这就形成了价值上千亿美元的Java产业。 有很多人认为Java开源后,在众多开发人员的参与之下,Java会变得更加强大。随着Java和IT业界的关系变得更加紧密,Sun公司也将更容易卖出自己兼容Java良好的WEB服务器和操作系统。这个举动将会给软件开发群体带来新的活力,改善Sun公司的公众形象,并同时证明Sun可以成为一个开源社会的“良民”。随着Java的开源,Java的未来似乎变得更加明朗。在未来,Java的应用范围有可能变得更广。Sun董事长麦克里尼在2006年的JavaOne会议上说,“全球有3/4的人还不能接入Internet,这对Java技术伙伴来说是一个巨大的经济机会。瘦客户机、微小的传感器以及其它Java驱动的小装置,可以帮助我们改善人们的生活。他希望Java社区通过他们的工作能够弥合数字鸿沟”。 Sun认为,数字媒体将是Java的下一个重点市场,同时,教育和健康将是未来Java发展过程中的两大重点应用领域。但愿Java的未来真能象Sun宣称的那样,成为我们未来生活的一部分。1.3.2 Java的特点Java是一种简单、安全、容易适用、面向对象、可移置、高性能、多线程的语言。 1、Java语言是简单的。Java语言的语法与C语言和C+语言很接近,使得大多数程序员很容易学习和使用Java。另一方面,Java丢弃了C+ 中很少使用的、很难理解的、令人迷惑的那些特性,如操作符重载、多继承、自动的强制类型转换。特别地,Java语言不使用指针,并提供了自动的废料收集,使得程序员不必为内存管理而担忧。2、Java语言是一个面向对象的。Java语言提供类、接口和继承等原语,为了简单起见,只支持类之间的单继承,但支持接口之间的多继承,并支持类与接口之间的实现机制(关键字为implements)。Java语言全面支持动态绑定,而C+ 语言只对虚函数使用动态绑定。总之,Java语言是一个纯的面向对象程序设计语言。3、Java语言是分布式的。Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、 ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。4、Java语言是健壮的。Java的强类型机制、异常处理、废料的自动收集等是Java程序健壮性的重要保证。对指针的丢弃是Java的明智选择。Java的安全检查机制使得Java更具健壮性。5、Java语言是安全的。Java通常被用在网络环境中,为此,Java提供了一个安全机制以防恶意代码的攻击。除了Java语言具有的许多安全特性以外,Java对通过网络下载的类具有一个安全防范机制(类ClassLoader),如分配不同的名字空间以防替代本地的同名类、字节代码检查,并提供安全管理机制(类SecurityManager)让Java应用设置安全哨兵。6、Java语言是体系结构中立的。Java程序(后缀为java的文件)在Java平台上被编译为体系结构中立的字节码格式(后缀为class的文件), 然后可以在实现这个Java平台的任何系统中运行。这种途径适合于异构的网络环境和软件的分发。7、Java语言是可移植的。这种可移植性来源于体系结构中立性,另外,Java还严格规定了各个基本数据类型的长度。Java系统本身也具有很强的可移植性,Java编译器是用Java实现的,Java的运行环境是用ANSI C实现的。8、Java语言是解释型的。如前所述,Java程序在Java平台上被编译为字节码格式, 然后可以在实现这个Java平台的任何系统中运行。在运行时,Java平台中的Java解释器对这些字节码进行解释执行,执行过程中需要的类在联接阶段被载入到运行环境中。9、Java是高性能的。与那些解释型的高级脚本语言相比,Java的确是高性能的。事实上,Java的运行速度随着JIT(Just-In-Time)编译器技术的发展越来越接近于C+。10、Java语言是多线程的。在Java语言中,线程是一种特殊的对象,它必须由Thread类或其子(孙)类来创建。通常有两种方法来创建线程:其一,使用型构为Thread(Runnable) 的构造子将一个实现了Runnable接口的对象包装成一个线程,其二,从Thread类派生出子类并重写run方法,使用该子类创建的对象即为线程。值得注意的是Thread类已经实现了Runnable接口,因此,任何一个线程均有它的run方法,而run方法中包含了线程所要运行的代码。线程的活动由一组方法来控制。 Java语言支持多个线程的同时执行,并提供多线程之间的同步机制(关键字为synchronized)。11、Java语言是动态的。Java语言的设计目标之一是适应于动态变化的环境。Java程序需要的类能够动态地被载入到运行环境,也可以通过网络来载入所需要的类。这也有利于软件的升级。另外,Java中的类有一个运行时刻的表示,能进行运行时刻的类型检查。Java语言的优良特性使得Java应用具有无比的健壮性和可靠性,这也减少了应用系统的维护费用。Java对对象技术的全面支持和Java平台内嵌的API能缩短应用系统的开发时间并降低成本。Java的编译一次,到处可运行的特性使得它能够提供一个随处可用的开放结构和在多平台之间传递信息的低成本方式。特别是Java企业应用编程接口(Java Enterprise APIs)为企业计算及电子商务应用系统提供了有关技术和丰富的类库。1.3.3 Java与InternetJava语言取得成功的领域之一就是网络:(其他语言)数页代码-(Java)一条语句.在Java出现以前,Internet上的信息内容都是一些乏味死板的HTML文档。这对于那些迷恋于WEB浏览的人们来说简直不可容忍。他们迫切希望能在WEB中看到一些交互式的内容,开发人员也极希望能够在WEB上创建一类无需考虑软硬件平台就可以执行的应用程序,当然这些程序还要有极大的安全保障。对于用户的这种要求,传统的编程语言显得无能为力。SUN的工程师敏锐地察觉到了这一点,从1994年起,他们开始将OAK技术应用于WEB上,并且开发出了HotJava的第一个版本。当SUN公司1995年正式以Java这个名字推出的时候,几乎所有的WEB开发人员都心生感叹:噢,这正是我想要的!于是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是更低级的网络传输方式,它把数据的目的纪录在数据包中,然后直接放在网络上1.4 Socket编程1.4.1 关于TCP/IP协议TCP协议是网络通信的基石,对此,Java专门提供了Socket的类库,在其中抽象出TCP协议通信的常用方法:TCP协议与三次握手:在讲述TCP协议流程前,先来声明两个重要的概念:(1)客户端,首先发送TCP请求的是客户端,客户端一般是服务(比如数据查询服务)的请求者。(2)服务器,在接收到客户端的请求后(确保同客户端的通信信道建立)服务器会向客户端提供服务。服务器一般是服务的执行者,会向客户端返回服务执行的结果。为了实现客户端同服务器端的通信,客户端首先发送一个“SYN”数据包。如果服务器收到SYN标记,它将发回一个“SYN+ACK”数据包。接着,客户端为了表示收到了这个SYN+ACK信息,会向服务器发送一个最终确认信息(ACK包)。这种SYN,SYN+ACK,ACK的步骤被称为TCP连接建立时的“三次握手”,在这之后,连接就建立起来了,这个连接将一直保持活动状态,直到超时或者任何一方发出一个FIN(结束)信号。这种通信模式也叫客户端/服务器(C/S)模式。ACK=1第一次握手,主机A向主机B发送连接请求第二次握手,主机B收到主机A的请求,向主机A回发一个确认,同时向主机A发送一个连接请求第三次握手,主机A收到主机B发送的数据包在向主机B发送一个确认连接主机A 主机BSYN=1,SEQ=ACK=1,SYN=1,SEQ=aaaaaaaaaa 图1.3 三次握手协议由此可见,通过客户端和服务器的“三次握手”,双方可以建立畅通的通信信道,在此信道上双方互相传输数据。1.4.2 服务器和客户机网络最基本的目的就是让两台机器连接到一起,并相互“交谈”或者“沟通”。一旦两台机器都发现了对方,就可以展开一次令人愉快的双向对话。但它们怎样才能“发现”对方呢?这就像在游乐园里那样:一台机器不得不停留在一个地方,侦听其他机器说:“嘿,你在哪里呢?” “停留在一个地方”的机器叫做“服务器”(Server);到处“找人”的机器则叫做“客户机”(Client)或者“客户”。它们之间的区别只有在客户机试图同服务器连接的时候才显得非常明显。一旦连通,就变成了一种双向通信,谁来扮演服务器或者客户机便显得不那么重要了。 所以服务器的主要任务是侦听建立连接的请求,这是由我们创建的特定服务器对象完成的。而客户机的任务是试着与一台服务器建立连接,这是由我们创建的特定客户机对象完成的。一旦连接建好,那么无论在服务器端还是客户机端,连接只是魔术般地变成了一个IO数据流对象。从这时开始,我们可以象读写一个普通的文件那样对待连接。所以一旦建好连接,我们只需使用自己熟悉的IO命令即可。这正是Java联网最方便的一个地方。图1.4 服务器和客户机的连接1.5本文内容安排本论文内容安排如下:第二章为聊天系统的需求分析,主要介绍系统的可行性研究,需求分析流程图等。第三章为概要设计,分模块介绍系统的具体实现过程。第四章为详细设计。2 需求分析2.1需求2.1.1 可行性分析经济可行性:由于本系统的主要背景是毕业课程设计,不注重直接的经济效益和其后的发展方向,只在注重自身水平和能力的提高,对自身的经济要求也不高,只要有一台能运行Java软件的电脑便可,所以不用考虑到经济问题。技术可行性: 本系统的开发利用Microsoft SQL Server2000作为本系统的数据库,它是一个支持多用户的新型数据库,适用于大中规模的数据量需求。学校校园网的建设也为新系统服务器/客户端的结构提供了硬件的支持。使用Java作为系统开发的开发环境,它提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。运行可行性: 本系统为一个小型的局域网聊天系统,所耗费的资源非常的小,现在一般的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。综上所述,本系统的设计与开发在技术上和硬件设备上的条件都是满足的,因此,它在技术上是可行的。2.1.2系统功能需求本系统主要通过客户端,服务器端来体现聊天系统的基本功能。(1)服务器端1.处理用户注册2.处理用户登录3.处理用户发送信息,服务器监控聊天内容,服务器过滤非法内容4.处理用户得到信息5.处理用户退出6. 保存服务器日志。 7.保存用户聊天信息。(2)客户端 1.用户注册界面及结果2.用户登录界面及结果3.用户发送信息界面及结果4.用户得到信息界面及结果5.用户退出界面及结果2.1.3 系统性能需求实用性:为局域网聊天提供方便,有效进行作业管理。可应用于企业办公室,以及校园电子阅览室操作简单:本系统应该适用于不同水平的使用者,包括事业单位和企业单位,同时系统不应太复杂和烦琐,因此要求系统的操作尽可能简单易行。技术先进:产品的系统设计和开发应紧跟着整个计算机发展潮流,采用当时最先进的设计思想,利用最新的开发技术和开发工具。使系统能够无论在功能设计上,还是在技术实现上,都处于同行业的领先地位。安装使用简便:服务器端的安装简洁明了,客户机无需再装任何软件就可以直接注册登陆聊天。适应性:应该能广泛应用于不同类型的企事业单位。系统采用模块化设计,用户可以根据自己的实际情况自行组合,使系统在不同的硬件环境下都能得以应用。 代码可读性好:文中的代码将尽可能简洁,易懂。2.1.4 系统运行需求 运行环境:Windows 2000、xp、2003,Linux必要环境:JDK 1.5 以上硬件环境:CPU 400MHz以上,内存64MB以上2.2 数据流图2.2.1 顶层数据流图图2.1 顶层数据流图2.2.2 一层数据流图. 图2.2 一层数据流图2.2.3 二层数据流图图2.3系统二层数据流图3 概要设计3.1系统实现原理聊天系统的设计跟普通网站设计有着许多不同的地方,普通网站设计所考虑的因素,例如,普通网站需要对布局进入大量美化以及动画设计等等,而聊天室只要提供满足访客双方直接实时聊天即可。因此,在设计聊天系统的过程中,必须要考虑好以下几个设计要点:在Internet上的聊天程序一般都是以服务器提供服务端连接响应,使用者通过客户端程序登录到服务器,就可以与登录在同一服务器上的用户交谈,这是一个面向连接的通信过程。因此,程序要在TCP/IP环境下,实现服务器端和客户端两部分程序。图3.1 系统实现原理图3.2 系统实现层次图:交互聊天系统服务器端客户端建立连接操作数据库监听客户用户注册用户登陆查找好友聊天图3.2 系统实现层次图3.3各模块详细功能3.3.1服务器端结构图3.3 服务器端结构图ServeFrame.java 为服务器端程序界面,负责为服务器的启动提供界面服务。AppServer.java 为服务器端启动界面,负责监听服务器的状态,在线人数,最多在线人数,服务器名称,访问协议,服务器IP,服务器端口以及用户信息的管理,日志的保存。Connection.java 是连接服务器和客户端的桥梁,主要负责将客户端的信息传送给服务器,并将服务器端的信息反馈给客户端,即所谓的“三次握手”。也是Socket编程的重要部分。WordFilter.java 负责将聊天过程中不合法的话语文件等过滤掉,返回合法内容。3.3.2 客户端结构图3.4 客户端结构图ChatClient.java 为客户端程序启动类,负责客户端的启动和退出。Login.java 为客户端程序登录界面,负责用户帐号信息的验证与反馈。Register.java 为客户端程序注册界面,负责用户帐号信息的注册验证与反馈。ChatRoom.java 为客户端程序聊天室主界面,负责接收、发送聊天内容与服务器端的Connection.java 亲密合作。Windowclose 为ChatRoom.java的内部类,负责监听聊天室界面的操作,当用户退出时返回给服务器信息。3.4 数据库的设计在SQLserver2000上新建立一个名为javaicq的数据库包括两个表,一个是 存放用户基本信息的icq表其中包括用户的号码(Icqno)、昵称(nickname)、密码(password)、在线状态(status)、IP地址(ip)、用户资料(info)、性别(sex)、E-mail(email)和籍贯(place)(见3.6表),另一个是存放用户好友的friend表,由于以上有描述本系统主要部分是在网络传输上的,所以本系统设计用户的好友表相对简单,只设计了用于存放用户号码的用户号码字段(icqno)和存放用户好友的号码用户号码字段(friend)两个字段(见3.7表),用来保存用户的好友信息。次数据库中的两个表示通过主子段icqno相关联的,E-R图如图3.8所示。用户的基本信息表(icq)表3.6用户的基本信息表序号字段名含义数据类型NULL1Icqno用户号码IntNo2Nickname用户昵称CharNo3Password用户密码CharNo4Status用户在线否BitNo5Ip用户的IP地址CharYes6Info用户的资料VarcharYes7Sex用户的年龄CharYes9E-mail用户的emailCharYes8Place用户的籍贯CharYes用户的好友表(friend)表3.7用户的好友表序号字段名含义数据类型NULL1Icqno用户的号码IntNo2Friend好友的号码IntNoE-R图1nIcqFriend属于 图3.8表Icq和表Friend的E-R图3.5聊天界面设计当用户登录成功后,用户的登录界面将会隐藏,然后创建用户聊天室窗口,在界面的标题栏将会显示当前登录用户的用户名用户需要发送信息时,在聊天内容里写下要发送的信息,然后点击发送就可以发送到其他客户端,也可以选择私聊,聊天表情,聊天信息通过服务器发送到其他客户端。当多个用户同时在线时可以对某个人私聊,而第三个人的聊天界面会被屏蔽掉。4 详细设计4.1 系统流程图4.1.1 系统服务器端流程图图4.1 系统服务器端流程图4.1.2 系统客户端流程图图4.2 客户端流程图4.2 系统的实现4.2.1 问题陈述 1. 接受用户注册信息并保存在数据库。 2. 能够允许注册过的用户登录聊天界面并可以聊天。 3. 能够接受私聊信息并发送给特定的用户。 4. 服务器运行在自定义的端口上1001. 5. 服务器监控用户列表和用户聊天信息(除私聊外)。 6. 服务器保存日志。4.2.2 解决方案 (1)多线程的实现服务器端的多线程是通过Java提供的API函数中的ServerThread类来实现的,用run()方法来监听线程,当监听到有客户端申请连接时用start()方法来启动一个新线程用来和这个客户端建立连接,同时当有新的客户端申请连接时服务器端会再用start()方法启动一个新的线程再与这个新的客户端进行连接,这样就可以实现了服务器端的多线程。具体代码如下所示:public ServerThread(Socket s) throws IOException /线程构造函数 socket=s;/取得传递参数 in = new BufferedReader(new InputStreamReader(socket.getInputStream();/创建输入流 out=newPrintWriter(newBufferedWriter(new OutputStreamWriter(socket.getOutputStream(),true);/创建输出流 start();/启动线程 public void run()/线程监听函数try while(true)String str=in.readLine();/取得输入字符串if(str.equals(end)break;/如果是结束就关闭连接 else if(str.equals(login) /如果是登录try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/连接数据库Connectionc=DriverManager.getConnection(jdbc:odbc:javaicq,sa,321); String sql=select nickname,password from icq where icqno=?; /准备从数据库选择呢称和密码 PreparedStatement prepare=c.prepareCall(sql);/设定数据库查寻条件 (2)数据库在程序中的应用 Java提供了强大的API功能JDBC则是专门为了解决程序与数据库连接问题而建立的API,而本程序采用了Java API中提供的介于前端应用程序与后端数据源之间,作为数据访问沟通的桥梁之一的JDBC-ODBC桥,应用程序通过它可以调用ODBC连接数据源(如图4.2),由于Microsoft Windows操作系统中的ODBC大多已支持各种类的数据源,Microsoft SQL Server正是Microsoft Windows操作系统中的ODBC支持的数据源之一,因此在建构上较为方便,可直接使用JDK所附加的驱动程序进行连接:sun.jdbc.odbc.jdbcodbcDriver。 主要代码如下所示:public void run()/线程监听函数try while(true)String str=in.readLine();/取得输入字符串if(str.equals(end)break;/如果是结束就关闭连接 else if(str.equals(login) /如果是登录try Class.forName(sun.jdbc.odbc.JdbcOdbcDriver);/连接数据库Connection c=DriverManager.getConnection(jdbc:odbc:javaicq,sa,321); String sql=select nickname,password from icq where icqno=?; /准备从数据库选择呢称和密码 首先服务器启动线程监听,当监听到有客户端申请连接时根据客户端提出的申请作出响应的处理,服务器端首先使用Class.forName方法加载数据库驱动类,该类的描述是sun.jdbc.odbc.JdbcOdbcDriver;然后使用DirverManager.getConnection方法连接数据库名为jdbc:odbc:javaicq的数据库,如果客户端输入的字符串表示登陆则服务器接收到该信息后连接数据库,准备从数据库选择昵称和密码。服务器端接受到客户端发送过来的号码和密码信息之后通过和数据库中的用户名和密码相比较来确定用户的登陆是否成功并对客户端做出相应的回应。还有通知好友、新建用户、读取资料、添加好友、添加好友应答、删除好友、退出下线功能的实现都是用同样的方法来调取数据库的,这些功能的实现均在Server类中一一实现。(3)服务器端的实现 服务器端首先启动线程监听函数,然后定义一个字符串类用于取得客户端发给服务器端的字符串,如果取得输入字符串为”login”则表示用户申请登陆,如果用户没有登陆而是点击取消则直接关闭连接,如果是登陆,服务器首先通过Class.forName(sun.jdbc.odbc.JdbcOdbcDriver)语句连接数据库,然后等待用户的输入,当接收到来自客户端输入的号码和密码后,通过Java套接SQL语句来查询数据中的号码和密码比较是否和客户端发送过来的相同,如果相同就告诉客户OK可以登陆,同时更新数据库次用户为在线以及注册用户的IP地址否则告诉客户登陆失败 。 如果取得客户端输入的字符串为”new”则代表用户申请新建用户,首先用以上连接数据库的方法连接数据库然后用java语句套接Sql语句方法语句String newsql=insert into icq(nickname,password,email,info,place) values(?,?,?,?,?,?)来准备接受用户的昵称、密码、email、个人资料、等信息也是准备为新用户开辟空间, 当用户将自己填写好的资料发送的服务器时服务器通过语句String sql2=select icqno from icq where nickname=?;来执行将用户的资料添加到数据库中,最后告诉客户其注册的号码。如果取得客户端输入的字符串为”find”则表示用户申请要查找好友,首先连接数据库,通过String find=select nickname,sex,place,ip,email,info from icq语句来连接数据库中icq表并把取得的其他用户的昵称,性别,籍贯,是否在线,号码等资料返回给申请查询的客户端, 如果取得客户端输入的字符串为”friend”则表示用户登陆时申请读取其好友资料,同样连接数据库,通过String friend=select friend from friend where icqno=?语句来查询其好友号码,通过friendinfo=select nickname,

温馨提示

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

评论

0/150

提交评论