当前位置:文档之家› 基于JAVA聊天室的设计与实现

基于JAVA聊天室的设计与实现

T论文分类号:TP 学校代码:13681 毕业设计说明书(论文) 题目:基于JAVA聊天室的设计与实现

学生姓名:

学号:

系部:

专业班级:

指导教师:

二〇一一年七月

I

Based on the Java Chat Room Design and Implementation

ABSTRACT

The rapid development of computer network technology, so that people can choose to communicate more and more the traditional means of communication in the velocity and reliability have been difficult to meet the needs of the people, the instant communication system has become one of the new favorites is an indispensable part. Instant communication refers to the release of information and information receiver almost at the same time to transfer requirements, a small delay system tools. Such as the commonly used QQ tools, web, MSN communication system tools.The system includes the development of a network chat server program and a network chat client program in two aspects. The former through the Socket establish a server, server can read, forwarded from client information, and can refresh the list of users. The latter by establish a connection with the server, to client and client information exchange. Which uses a local area network communication mechanism, through direct Thread class inheritance to create multiple threads. Development of the computer network programming to the basic knowledge, such as the TCP / IP protocol, client / server mode ( Client / Server mode), network programming design method. Network programming in the information read, send, is the use of flow to achieve information exchange, which is introduced to implement a systematic analysis of information flow, including some basic software engineering methods. Through the analysis of these cases, the LAN chat tools using Eclipse as the basic development environment and Java language preparation, first in a short period of time can build up the system application prototype, then, for the initial prototype system, revises and the improvement unceasingly, at the same time, multi-threading, task design, developed a stable performance, fully functional the server.

The complete implementation of the function of the system. Through this graduation design can be learned about the application and implementation of object-oriented methods, how to use the Eclipse integrated development environment to create and development projects, thus the complete realization of the function of the system.

KEY WORDS:Java chat room ,application program ,development environment

II

基于Java聊天室的设计与实现

摘要

计算机网络技术的快速发展,使人们可选择的交流方式越来越多,传统的通信方式在速度和可靠性方面已经很难满足人们的需要,即时通信系统已成为人们的新宠也是人们生活中不可或缺的一部分。即时通信即指信息的发布者与信息的接收者几乎同时达到传送要求,延迟很小的系统工具。如常用的QQ工具,飞信,MSN等通讯系统工具。

该系统开发主要包括一个网络聊天服务器程序和一个网络聊天客户程序两个方面。前者通过Socket套接字建立服务器,服务器能读取、转发客户端发来信息,并能刷新用户列表。后者通过与服务器建立连接,来进行客户端与客户端的信息交流。其中用到了局域网通信机制的原理,通过直接继承Thread类来建立多线程。开发中利用了计算机网络编程的基本理论知识,如TCP/IP协议、客户端/服务器端模式(Client/Server模式)、网络编程的设计方法等。在网络编程中对信息的读取、发送,是利用流来实现信息的交换,其中介绍了对实现一个系统的信息流的分析,包含了一些基本的软件工程的方法。经过分析这些情况,该局域网聊天工具采用Eclipse为基本开发环境和Java语言进行编写,首先可在短时间内建立系统应用原型,然后,对初始原型系统进行不断修正和改进,同时,采用多线程、多任务的设计思想,开发出性能稳定,功能全面的服务器。完整的实现系统的功能。通过本次毕业设计可以学到如何应用和实现面向对象的各种方法,如何使用Eclipse集成开发环境来创建和开发项目,从而完整的实现整个系统的功能。

本系统结构设计合理,功能齐全,采用模块化设计、操作简单,具有良好的人机界面和灵活的系统可维护性;可以实现简单的功能如注册、登陆、查找好友、聊天等功能。并且服务端实现配置文件设置、用户管理、日志显示等功能。

关键词:聊天室,应用程序,开发环境

III

目录

1引言 (1)

1.1即时通讯技术概述 (1)

1.2目的和意义 (2)

2项目开发工具和技术选择 (3)

2.1开发工具 (3)

2.1.1Java简介 (3)

2.1.2 MyEclipse6.0 开发工具 (3)

2.2技术选择 (4)

2.2.1 C/S结构 (4)

2.2.2 Java Socket技术 (4)

3需求分析 (6)

3.1项目概述 (6)

3.1.1产品描述 (6)

3.1.2产品功能 (7)

3.2功能需求 (7)

3.2.1用户注册 (7)

3.2.2用户登入 (8)

3.2.3一对一聊天 (8)

3.2.4发送表情 (9)

3.2.5用户退出 (9)

3.3质量性能需求 (9)

4概要设计 (11)

4.1系统的代码结构 (11)

4.2主程序类的设计(MainWin类) (11)

4.3多线程的设计 (11)

4.4服务器端的设计(Server类) (12)

4.5消息通信的设计 (12)

5系统的实现 (14)

5.1主程序类的实现 (14)

5.2多线程的实现 (14)

5.3服务器连接的实现 (15)

IV

5.4消息通信的实现 (15)

6详细设计 (17)

6.1客户端注册 (17)

6.1.1功能描述 (17)

6.1.2综合设计 (17)

6.2登入 (19)

6.2.1功能描述 (19)

6.2.2综合设计 (20)

6.3聊天 (22)

6.3.1功能描述 (23)

6.3.2综合设计 (23)

6.4发送系统消息 (24)

6.4.1功能描述 (24)

6.4.2综合设计 (24)

6.5功能逻辑实现 (24)

6.5.1逻辑功能描述 (24)

6.5.2综合设计 (25)

7系统测试 (26)

7.1测试举例 (26)

7.1.1测试程序登录界面 (26)

7.1.2测试程序主界面 (26)

7.1.3测试程序退出 (26)

7.2测试项目 (26)

7.2.1单元测试 (27)

7.2.2组合测试 (27)

7.2.3确认测试 (27)

7.2.4系统测试 (27)

7.2.5用户验收测试 (28)

结论 (29)

致谢 (30)

参考文献 (31)

毕业设计说明书(论文)缩写稿 (31)

The Abbreviation Version of the Thesis of Undergraduates (39)

基于JAVA聊天室的设计与开发 1

1引言

1.1即时通讯技术概述

最初接触的即时通讯(Instant Messenger,简称IM)即为聊天室。老牌的ICQ、国内非常受大众欢迎的腾讯QQ以及微软开发的MSN, Messenger都是我们十分关注的焦点。通过这些即时通讯工具我们可以在网上迅速的找到朋友或者工作伙伴,进行实时交流和互传信息。经过这些年的研究发展,不少IM软件还集成了数据交换、语音以及视频聊天、网络会议、电子邮件等功能。

IM技术全称Instant Messaging,中文翻译“即时通讯”,它是一种使人们能在网上识别在线用户并与互联网上的年轻中国实时交换消息的技术,是电子邮件发明以来迅速崛起的在线通讯方式。

IM的出现和互联网有着密不可分的关系,IM完全是基于TCP/IP网络协议族来实现,而TCP/IP协议族则是整个互联网得以实现的技术基础。最早出现即时通讯协议是IRC(Internet Relay Chat),但是可惜的是它仅能单纯的使用文字、符号的方式通过互联网进行交谈和沟通。随着互连网变得高度发达,即时通讯也变得远不仅仅是聊天这么简单,自从1996年第一个IM产品ICQ发明后,IM的技术和功能也开始基本成型,语音、视频、文件共享、短信发送等高级信息交换功能都可以在IM工具上实现,于是功能强大的IM软件便足以搭建一个完整的通信交流平台。目前即时通讯、Twitter受宠电子邮件过气最具代表性的几款的IM通讯软件有MSN、Google Talk、Yahoo、Messenge腾讯QQ等。

即时通讯技术(IM)支持用户在线实时交谈。如果要发送一条信息,用户需要打开一个小窗口,以便让用户及其朋友在其中输入信息并发送信息时让交谈双方都看到交谈的内容。大多数常用的即时通讯发送程序都会提供各种各样的功能。

IM软件的历史并不久远,但是当时它一诞生,就立即受到许许多多的网民的喜爱和青睐,并且迅速的风靡全世界。而在它的发展史上,以色列人所作出的贡献是不可忽略的。在1996年7月四位以色列年轻人共同成立了Mirabilis公司,并且于同年11月推出了全世界第一个即时通讯软件ICQ,即“I Seek You”,意为“我在找你”,简称就为ICQ了。直到现在,ICQ已经推出了它的2002a版本,在全球即时通讯市场上占有非常重要的地位。同时,ICQ仍然存在一些局限性。一是英文界面,二是在使用操作上有相当的困难,这使得ICQ在国内使用的范围虽然也比较广,但始终不是特别普及和推广,大多局限于“网虫”级别的高手里。

目前,国内最为流行的即时通讯软件是OICQ(简称QQ)。腾讯QQ以良好的中文

2

1引言

界面和不断增强的功能形成了一定的QQ网络文化。由于当时这种需要随时在网上运行的聊天工具一直受制于互联网的拨号上网,这导致QQ用户数一增加就要不断的扩充服务器,客观上来说,电信运营商对宽带投入的大幅增长导致互联网的更加普及,在某种意义上说,这是即时通讯繁荣的物质基础。

Messenger虽然出道较晚,但依托微软的强大背景,实力也不可小视。作为Windows XP的一部分,Messenger整合了操作系统的许多功能,如多种形式的聊天选择、多人的单窗口讨论式交流以及充分的文件与桌面共享功能等。它的令人耳目一新的中文界面和注册方式,连同它强大的功能,着实吸引了众多的眼球的注视。

1.2目的和意义

目的:

通过Java的手段来模仿QQ,设计一个用于局域网的即时通讯工具,使其具有一般的即时通讯工具具有的功能。如注册、登陆、查找好友、实现即时消息的发送与接收,可多人会话,并且可通过统一的消息管理器管理,服务端还需实现配置文件设置、用户管理、日志显示的功能。并且可以完成在学校的范围搭建一个可以供老师及学生相互交流及联系的平台。学生与学生之间不必再通过互联网或手机等方式来实现相互之间的通信,完全可以通过Java QQ中的通信功能进行联系。老师可以通过Java QQ向同学们发送及时的信息如学院的通知、考试通知、成绩通告,及时掌握学生的动态,提供必要的帮助。这就有效地解决老师与老师之间的,老师与学生之间的,学生与学生之间的通讯问题。

通过课题的设计对从而使我们对Java的开发背景有更加深刻的认识,同时可更加熟练的应用Java相关的知识,学会理论联系实践用知识去解决现实生活当中的问题。

意义:

网络聊天室是一项应用广泛,并且实用性强的一个应用,虽然其功能简单,但是在其开发技术和过程中,能够充分学习和使用Java的技术,如:开发各界面(登入、注册、聊天等界面)使用Swing组件技术,实现网络的功能使用Socket/Server Socket技术,实现数据的保存,并且在开发过程当中,能充分的使用和体会面向对象技术的原理和方法。

通过对该项目的设计以开发可以使自己在Java技术方面得到全面应用,使自己项目开发能力的一个很好体现。并且对Java有更进一步的认识,充分理解和掌握Java在现实生活中的应用。将开发出来的作品运用到实际当中,如学校,企业等其他任何需要的地方。使人们之间的交流和沟通更加的多元化,也使信息的传递更加快捷和有效。在设计和开发的过程中不断跟踪国内外最新的技术和开发模式,即时了解和掌握流行的即时通讯机制并且应用到实践过程中,极大的提高自己的设计和开发软件的积极性。即时通讯的出现改变了人们的沟通方式和交友文化,大大扩展了个人生活交流的空间。

基于JAVA聊天室的设计与开发 3

2项目开发工具和技术选择

2.1开发工具

2.1.1 Java简介

Java最早大概可追溯至1991年四月份,Sun的绿色计划(Green Project)开始着手于发展消费性电子产品(Consumer Electronics),所使用的语言是C、C++、及Oak (为Java 语言的前身),后因语言本身和市场的问题,使得消费性电子产品的发展无法达到当初预期的目标,再加上网络的兴起,绿色计划也因此而改变发展的方向,最终导致Java 的产生。Java是一种简单的、面向对象的、健壮的、安全的、解释的、与平台无关的、多线程的、动态的语言。Java是一种软件技术,是一种由美国Sun计算机公司(Sun Microsystems, Inc.)所研究而成的语言;是一种为Internet发展的计算机语言;是一种使网页(Web Page)产生生动活泼画面的语言;是一种使网页由静态转变为动态的一种语言;是一种语言,用以产生小应用程序(Applet(s));是一种简化的C++语言是一种安全的语言,具有阻绝计算机病毒传输的功能;是一种将安全性(Security)列为第一优先考虑的语言;是一种使用者不需花费很多时间学习的语言;是一种突破用户端机器环境和CPU结构的语言;是一种写一次,即可在任何机器上执行的语言是有史以来,第一套允使用者将应用程序(Applications)通过Internet从远端的服务器(Remote Server)传输到本地端的机器上(Local Machine)并执行;是一种应用程序提供者不需要知道使用者的计算机硬件(如:Sun, Intel, 或Mac等)与软件(如:SW- UNIX, MAC O/S, Windows, 或NT等)环境的语言。

2.1.2 MyEclipse6.0 开发工具

Java的开发工具很多,而且各有优缺点,Eclipse是一个开放可扩展的集成开发环境(IDE)。它不仅可以用于Java的开发,通过开发插件,它可以构建其他的开发工具。Eclipse是开放源代码的项目,并可以免费下载。支持最新的Java标准,并且缩短了开发周期。一直以其友好的集成开发环境在业界受到广泛的赞誉,这也是Eclipse一直是广大程序员最喜爱的Java开发工具的原因之一。

Eclipse的可视化集成开发环境包括文本编辑器、工程创建工具、对象浏览器和调试器等。用户可以在集成开发环境中创建工程和打开工程,建立、打开和编辑文件,并可以编译、运行和调试应用程序。可以说在Eclipse集成开发环境中开发Java程序,快速而且高效。其主要特点如下:

(1)开放的可扩展的IDE

4

2项目开发工具和技术选择

(2)成功的底层图形界面API

(3)强大的插件加载功能

(4)可以通过导入一些CVS相关的插件来实现版本管理的便易性

Eclipse是一个开放源代码的、基于Java的可扩展开发平台。但就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。然而幸运的是,Eclipse附带了一个标准的插件集,包括Java开发工具(Java Development Tools,JDT)。Eclipse 同时还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展Eclipse的软件开发人员,因为它允许他们构建与Eclipse环境无缝集成的工具。专注于为高度集成的工具开发提供一个全功能的、具有商业品质的工业平台。它主要由Eclipse项目、Eclipse工具项目和Eclipse技术项目三个项目组成,具体包括四个部分组成——Eclipse Platform、JDT、CDT和PDE。JDT支持Java开发、CDT支持C 开发、PDE用来支持插件开发,Eclipse Platform则是一个开放的可扩展IDE,提供了一个通用的开发平台。它提供建造块和构造并运行集成软件开发工具的基础。Eclipse Platform允许工具建造者独立开发与他人工具无缝集成的工具从而无须分辨一个工具功能在哪里结束,而另一个工具功能在哪里开始。

2.2技术选择

2.2.1 C/S结构

C/S结构软件(即客户机/服务器模式)分为客户机和服务器两层,客户机/服务器网络中,服务器是网络的核心,而客户机是网络的基础,客户机依靠服务器获得所需要的网络资源,而服务器为客户机提供网络必须的资源。客户机不是毫无运算能力的输入、输出设备,而是具有了一定的数据处理和数据存储能力,通过把应用软件的计算和数据合理地分配在客户机和服务器两端,可以有效地降低网络通信量和服务器运算量。

C/S结构的优势:(1)应用服务器运行数据负荷较轻。最简单的C/S体系结构的数据库应用由两部分组成,即客户应用程序和数据库服务器程序;(2)数据的储存管理功能较为透明。

C/S结构的劣势:(1)高昂的维护成本且投资大。首先,采用C/S架构,要选择适当的数据库平台来实现数据库数据的真正“统一”,使分布于两地的数据同步完全交由数据库系统去管理;(2)传统的C/S结构的软件需要针对不同的操作系统系统开发不同版本的软件,由于产品的更新换代十分快,代价高和低效率已经不适应工作需要。

2.2.2 Java Socket技术

本课题选择了Java Socket技术开发网络聊天室。什么是Socket? Socket是一种用于表达两台机器之间连接“终端”的软件抽象。对于一个给定的连接,在每台机器上都

基于JAVA聊天室的设计与开发 5

有一个Socket,你可以想象一个虚拟的"电缆"工作在两台机器之间,“电缆”插在两台机器的Socket上。当然,物理硬件和两台机器之间的“电缆”这些连接装置都是未知的,抽象的所有目的就是为了让我们不必了解更多的细节。简单的说,一台计算机上的Socket同另一台计算机通话创建一个通信信道,程序员可以用这个信道在两台机器之间发送数据。当你发送数据时,TCP/IP协议栈的每一层都给你的数据里添加适当的报头。有个好消息是Java语言隐藏了所有这些细节,这也是为什么他们有时被叫做“流Socket”。思考一下Socket像电话听筒一样在电话的任意一端,你和我通过一个专门的信道来进行通话和接听。会话将一直进行下去直到我们决定挂断电话(除非我们使用蜂窝电话),除非我们挂断电话,否则我们各自的电话线路都会占线。如果你需要在两台机器之间进行通讯而不使用高级机制像ORBS(以及CORBA, RMI, IIOP等等),Socket 比较适合你。Socket的底层机制则相当棘手。幸运的是,Java平台给我们一些虽然简单但是相当强大的高层抽象以至于我们创建和使用Socket更加容易一些。

6

3需求分析

3需求分析

3.1项目概述

3.1.1产品描述

人们日常生活中越来越多地使用这项新的技术来为自己的工作和学习服务。一个操作简单、界面友好、运行稳定的网络聊天室对于小型局域网内的用户可以起到很好的交流作用。本聊天室就是一个可以让许多用户同时互相通信的网上园地,个人用户可以通过网上聊天室将自己融入整个主流社会中。因此,在网上聊天室这个虚拟的社会中,可以结交各层次各地方的朋友,从而为自己获取更多的知识和更多的阅历。

该小聊天室是为许多喜爱上网聊天的朋友开发设计的。和许多大型的网络聊天室相比该小聊天室比较简单,但能实现聊天的基本功能,点对点聊天等,基于时间和技术的原因,很遗憾传送文件的功能尚未实现。本聊天室主要由注册界面、登录界面、聊天室界面、功能设置界面等构成。整个设计简洁明了、实用,使用简单。Array

图3-1 客户端结构图

基于JAVA聊天室的设计与开发7

图3-2 服务器端结构图

3.1.2产品功能

本项目具有以下主要功能:

客户端:

(1)用户注册功能:实现用户的登入ID注册和个人信息,并存入服务器数据库中。

(2)用户登入功能:实现合法注册用户的登入。

(3)聊天功能:实现用户和在线的其他用户一对一的聊天方式。

(4)发送表情和设置聊天内容字体,并可以设置字体颜色和背景色等。

服务端:

(1)可以不断的监听客户端请求

(2)显示登入客户的信息

(3)发送系统消息

3.2功能需求

3.2.1用户注册

需求描述:用户填写系统给出的注册项目,并提交给系统,成功注册后,系统生成用户所注册的登入ID,并保存在数据库当中。

执行者:用户

前置条件:无

后置条件:无

8

3需求分析

正常过程:

(1)向服务端发送注册请求

(2)服务端响应客户端,客户端弹出注册信息表单

(3)用户填写完表单后将注册数据传给服务端处理,并保存在数据库中

(4)返回客户端一个响应,显示用户注册的ID,提示注册成功。

异常过程:

(1)用户填写表单的数据格式不正确或表单中存在空缺的项,客户端给予提示信息,并将光标定位到出错的地方。

(2)用户注册的项在数据库中发生冲突,客户端提示注册不成功并提示用户重新填写表单。

(3)服务器未启动或出现异常

3.2.2用户登入

需求描述:用户填写登入ID 和密码,经服务器验证成功后进入聊天室主界面。

执行者:用户

前置条件:用户成功注册或已经拥有一个合法的ID号

后置条件:无

正常过程:

(1)向服务端请求连接,并发送登录信息。

(2)服务端处理并查询数据库中的用户信息。

(3)返回客户端一个响应,提示登录成功,弹出聊天室主界面。

(4)刷新其他在线用户的用户列表信息。

异常过程:

(5)用户填写的ID或密码与数据库中的纪录不匹配,客户端提示登录失败。

(6)客户端设置的服务器地址或端口有误。

(7)服务器未启动或出现异常。

3.2.3一对一聊天

需求描述:用户可选择聊天室的在线用户列表中其他用户聊天。并且对方有消息提示,双方发送的信息对于聊天室的其他用户是不可见的。

执行者:用户

前置条件:用户登录成功,聊天的对方在线

后置条件:无

正常过程:

(1)客户端与服务端建立通讯

基于JAVA聊天室的设计与开发9

(2)客户端将用户发送的信息打包传送给服务端

(3)服务端进行数据分析,查找目的用户的ID,并将用户的信息传给目的用户

(4)目的用户收到服务器的信息后,正确的显示并保存

异常过程:

(5)客户端与服务端断开连接,客户端提示信息发送失败。

(6)客户端发送的聊天内容包含不合法的字符

3.2.4发送表情

需求描述:用户的聊天内容可以是表情图片

执行者:用户

前置条件:用户可以正常聊天

后置条件:无

正常过程:

(1)客户端与服务端建立通讯

(2)客户端将表情所表示的信息传送给服务端

(3)服务器端进行数据分析后,查找目的用户的ID,并将所处理的信息传给目的用户,目的用户端通过本地文件将信息翻译成表情并正确显示在显示窗体中。

异常过程:

(1)客户端与服务端断开连接,客户端提示服务器异常。

(2)客户端发送的表情信息不正确或本地文件不存在异常

3.2.5用户退出

需求描述:用户在正常情况下退出聊天室

执行者:用户

前置条件:用户成功登录聊天室

后置条件:无

正常过程:

(1)向服务器发送用户登出消息

(2)服务器进行用户退出的数据处理

(3)服务器向聊天室其他用户发送登出消息

(4)刷新其他在线用户的用户列表信息

3.3质量性能需求

(1)容错性需求:

当出现代码异常时,出现正确的提示,不会影响整个系统的运行。用户之间信息传

10

3需求分析

输不会因为数据封装问题出现丢失或乱码。因用户的误操作产生的异常应做出及时的处理或信息提示。

(2)稳定性需求:

软件应正常完成所有功能需求。服务器端应长时间运行无故障,故障修复时间一般控制在3小时内,除非出现恶性攻击、病毒破坏、系统资源不足、硬件故障、操作系统或数据库系统崩溃网络中断等情况,要求系统连续运行一周,不允许出现内存泄露。要求系统可以承受告警风暴和大数据量的冲击,不出现内存溢出等现象。

(3)软件设计需求:

要确定合适的模块粒度,各模块之间要求松耦合,高内聚;从而使整个系统的可靠性和稳定性得到提高,并且便于系统维护,和新模块的添加。

安全性:安全性是防止网络方面的攻击。

扩展性:系统建成后,应在现行系统上不需要做大的改动或不影响整个系统结构,就可以增加功能模块,这就必须在系统设计时留有接口,使其具有可扩展性和维护性。

易用性:系统操作的界面必须简洁、操作方便易用、设计合理。

基于JAVA聊天室的设计与开发11

4概要设计

4.1系统的代码结构

本系统的原程序几乎全部有代码构成,一个可分为四个部分,Server、New、Register 和MainWin。用其中的两个表qq和friend来存取程序所用到的一些信息。服务器端用Server来执行,客户端用New来执行,其它的两个类都是被调用的。下面我就对各个部分进行一下详细说明。

4.2主程序类的设计(MainWin类)

本部分是整个系统中最大的部分,但它们并不被直接执行,而是通过别的类来调用。它的主要作用是桥梁作用,里面定义的都是监听事件,当客户端要做某种操作时都可以被该类中相应监听事件所捕捉,然后监听事件对所捕捉到的客户端的操作进行相应的处理。该部分能实现好友查找,建立创建列表类,处理列表类和发送信息类来组成。(1)创建列表类

这个类包括好友列表和用户的功能列表。这两个列表的布局是一样的,都是空布局,然后一个一个的把控件添加上去,每添一个都要把坐标值付给主容器即主窗体,以便在相应的位置上显示这个控件。

(2)查找好友类

查找好友实际上就是要对数据库进行查询操作,其实现方法是通过Server类来做的。通过数据库的查询可以直接显示出其他用户的呢称,性别和所在省份。

(3)收发信息类

本系统主要部分尤其是难点都在网络传输上,所以发送信息部分就比较主要,它可以说是这个程序的一个标识。

发送信息是通过UDP协议直接向其他用户发送出去的,接收信息是在MainWin类里,用多线程里的无限监听方法,随时等待接收其他用户传来的信息。

4.3多线程的设计

服务器多线程详细设计:

主服务器类调用ServerThread类来实现服务器端的多线程,而每个ServerThread实体就是一个单独的线程,即对应于客户端连接请求响应的线程。服务器端总有一个线程在指定的端口等待客户的连接信息,即使用ServerSocket s=new ServerSocket(8080)语句在8080端口创建套接口;当有客户端申请连接时使用new ServerThread(socket)语句

12

4概要设计

创建一个新的线程来和客户端建立连接。

ServerThread类的构造,首先创建ServerThread(Socket s)线程的构造函数再通过Socket=s来取得ServerThread(Socket s)的传递函数,同时使用BufferedReader(new InputStreamReader(Socket.getInputStream()))来创建。最后使用start()函数启动这个线程;使用run()来监听已经连接的线程。

客户端的多线程设计:

客户端的多线程设计和服务器端的不同,客户端是用多线程里的无限监听方法,随时等待接收其他用户传来的信息。当然客户端是调用Thread类来实现多线程的,用run()方法来提供监听,然后创建一个异常来处理当有好友连接时出现的各种情况,如,好友上线,好友下线,有好友添加你为好友,有好友给你发送消息等等。

4.4服务器端的设计 (Server类)

服务器的工作主要是处理客户端与数据库的数据传递。一方面要对客户端提出的申请做出应答,另一方面要对数据库进行相应的操作。所以,与数据连接的语句全在Server 里,这样无论对调试还是运行都比较方便。

但Server类主要处理这些连接工作,对数据的具体操作几乎没有,能看到的只是在DOS界面的一些文字显示而已。例如,申请号码成功就要是要在Server端显示出申请成功,并显示出所申请的号码;添加好友时要显示好友的号码,并显示是否添加成功。

Server类主要是对客户端提出的申请做出回应,有login登录,new新建,find查找好友,friend读取好友资料,addfriend添加好友,delfriend删除好友,logout退出程序,getwhoaddme上线的时候通知好友。

由于Server只需处理客户端的申请和连接数据库,就没有必要在用窗体来显示了,所以我只把服务器端的响应在DOS界面中打印出来,无论是什么样的申请,做出什么样的应答,在服务器端都会有所显示,让用户清楚的看到。

Server端执行的是一个无限监听的过程,它要随时等待客户端说发出的申请。即使完成了一个申请,也要继续等待处理下一个申请,直到Server的退出Server类结构。

功能说明:

Server类是处理客户端和数据的连接工作的,同时也要对客户端的请求做出回应。

start()是线程的启动方法。

run()线程的运行方法,里面是程序的主要部分,用于做出服务器的所有回应。4.5消息通信的设计

本系统中通信主要是通过数据报服务来实现的,Java实现数据报通信的过程除了面向连接的Soket外,还有无连接的数据报Soket。数据报是网络层数据单元在介质上传输信息的一种逻辑分组格式,它是一种在网络中传播的、独立的、自身包含地址信息的

基于JAVA聊天室的设计与开发13

消息,它能否到达目的地,到达的时间,到达的内容是否回变化是不能准确知道的。数据报的通信双方不需要建立连接,对于像聊天通信这些不需要很高质量的应用程序来说,数据报通信是一个很好的选择。

在Java的API函数中有https://www.doczj.com/doc/5f4170511.html,这样包,此包中有两个类DategramSocket和DategramPacket,他们为应用程序采用数据报通信方式进行网络通信提供了支持,本系统对数据流的操作主要用这两个类。

工作流程是这样的,首先通信双方要建立数据报通信的Socket。可以通过创建DategramSocket来实现它,其构造方法有以下两种:

(1)Public DategramSocket() 构造一个数据报Socket,并使其与本地主机任一可用的端口连接。若打不开Socket则抛出SocketException异常。

(2)Public DategramSocket(int port) 构造一个数据报Socket,并使其与本地连接主机指定的端口连接。若打不开Socket或Socket无法与指定的端口连接则抛出SocketException异常。

然后,处理接受缓冲区的数据,获取服务结果。最后,当处理完缓冲区的数据,可以使用DategramSocket对象close()方法来关闭数据包通信Socket。

14

5系统的实现

5系统的实现

5.1主程序类的实现

主程序是利用MainWin类来实现的,虽然主程序类并不被直接执行但是由于所有的事件处理都在这个类中实现所以主程序类包含大量的成员变量,可分为三大块,第一是保存好友基本信息所有变量的定义,第二是用于临时变量保存临时好友也是用户的基本信息和一些数组的指数,第三是网络相关变量,再加上程序界面变量就是在此系统中用到的所有变

5.2多线程的实现

服务器端的多线程是通过Java提供的API函数中的ServerThread类来实现的,用run()方法来监听线程,当监听到有客户端申请连接时用start()方法来启动一个新线程用来和这个客户端建立连接,同时当有新的客户端申请连接时服务器端会再用start()方法启动一个新的线程再与这个新的客户端进行连接,这样就可以实现了服务器端的多线程。如图5-1所示:

图5-1服务器端多线程

相关主题
文本预览
相关文档 最新文档