课
专
班
姓
学
题:
业:
级:
名:
号:
QQ 在线聊天
软件工程
1 班
XXXXX
XXXXXXXXX
指导教师:
XXXXXX
设计日期:
2012 年 1 月 5 日
成
绩:
XXXXXXX 学院电气信息学院
目 录
一、开发工具及相关技术介绍...................................................................... 1
1.1
Socket 简介................................................................................................ 2
1.2 模型介绍..................................................................................................... 2
1.3 用 Java 实现 Socket 模型......................................................................... 3
Java 线程模型简介………………………………………………………..4
1. 4
二、系统需求分析............................................................. 错误!未定义书签。
2.1 系统功能描述................................................................................................ 5
2.2 系统功能分析................................................................................................ 6
三、系统设计......................................................................................................... 7
3.1 系统总体结构设计........................................................................................ 7
(1)服务端模块设计……………………………………………………………….8
(2)客户端模块设计……………………………………………………………….9
(3)数据库模块计………………………………………………………………10
四、源码与实现...................................................................................................11
4.1 系统主要模块代码 ............................................................................................................ 11
(1)启动.停止服务器…………………………………………………………….11
(2)客户端连接服务器…………………………………………………………..13
(3)聊天时发送信息……………………………………………………………..13
4.2 系统测试…...............………………………………………………………………….17
五、总结…...............………………………………………………………………..........….17
一、开发工具及相关技术介绍
1.1 Socket 简介
Socket 是 java 中需一要编写较低层次的网络通信程序(例如 Cljent/server 应用程序)
时提供的一种通讯机制。Socket 是两个程序进行双向数据传输的网络通信的端点,一般
由一个地址加上一个端日号来标一识。每个服务程序都在一个众所周知的端口上提供服
务,而想使用服务的客户端程序则需要连接该端口。通过 Socket 的数据是原始字节流信
息,通信双方必须根据约定的协议对数据进行处理与解释。
Socket 通信机制提供了两种通信.方式:有连接方式(TCP)和无连接方式(UDP 数
据报)。有连接方式中,通信双方在开始时必须进行一次连接过程,建立一条通信链路。
通信链路提供了可靠的,全双工的字节流服务。无连接力一式中,通信双方不存在一个连
接过程,一次网络 I/O 以一个数据报形式进行,而每次网络 I /O 可以和不同.主机的不
同进程进行。无连接方式开销小于有连接方式,但是所提供的数据传输服务不可靠,不
能保证数据报一定到达目的地”」·。
JAVA 的有连接通信采用流式 I/O 模式。Socket 是两个进程间通信链的端点,每个
Sockct 有两个流:一个输入流和一个输出流。只要向 Sockct 的输出流写,一个进程就可
以通过网络连接向其他进程发送数据;同样,通过读 Sockt 的输入流,就可以读取传输
来的数据。
有连接通信一般要经历以下四个基本步骤 ii
(1)创建 Sockct,建立连接;
(2)打开连接到 Sockct 的输入/输出流;
(3)按照一定的一脚议对 Socket 进行读/写操作;
(4)关闭 Socket。
第(3)步是程序员用来调用 Socket 和实现程序功能的关键步骤,其他三步在各种
程序中基本相同。
1.2 模型介绍
C/S 是 Client/Server 的缩写,即客户机/服务器技术,一也可以称为 C/S 模型。很显然,
C/S 技术有以下几个基木特点:
(1)C/S 技术一定包含两个部分,一个作为用户接口的前端,另一个作为共享资源接口
的后端。前端被称为客户端,后端被称为服务器端。客户进程包含逻辑和提供用户接口,服
务进程充当一个管理共享资源的软件引擎,这些共一享资源可以是数据库,打印机,调制解
调器和处理机等。
(2) 前端与后端的任务对计算机资源有完全不同的要求,这些计算机资源包括:
处理机速度,内存,磁盘速度,容量,输入输出设备等。
(3) 客户机与服务器由于可能基于完全不同的硬件和操作系统,所以它们之间的
交流川一能完全通过一套标准的已定义的 API 与 RPC。
C/S 软件技术是一种通用的,基于消息的技术。在这里,网络上的一台计算机向网络上
的另外一台计算机请求一个进程或数据,如下图所示。
Client/Server 结构的优点是速度快,缺点是 Server 进行更新时,Client 也必需更新
1.3 用 Java 实现 Socket 模型
首先,我们先介绍一卜 Sockct 的运行过程。通常在服务器的指定端口被绑定一个
Sockct,此时服务器只是处于等待状态,.监听客户的连接请求。这个过程如图 2 一 2 所示。
服务器一旦接收到客户机的连接请求,服务器选择一个新的端口并绑定一个新的 Sockct 与
客户端建立的 Sockct 对,这个过程如图 2 一 3 所示。
对客户机来说,连接请求被接受,客户端的 Sockct 便被成功创建了,Sockct 通信便
可以开始进行。由于 Sockct 端的输出流是服务端的输入流,Server 端的输入流是服务器
的输出流,反之亦然,所以,Client 和 Server 以通过读写各自 Sockct 进行交流。
关于 Java 里 Sockct 的运行过程实现。服务器使用 ServerSockct 类来处理客户机的连接
请求。当客户机连接到服务器所监听的端口时,ServerSockct 将分配一个新的 Socket 对象。
这个新的 Sockct 对象将连接到一些新端口,负责处理与之相对应客户机的通信。然后,服
务器继续监听 ServerSockct,处理新的客户机连接。
客户机首先创建一个 Sockct 对象,用于和服务器的通信。之后需创建两个对象:
DataInputStream 和 PrintStream,前者用于从 Sockct 的 InputStream 输入流中读取数据,
后者则用于向 Sockct 的 OutputStream 的写数据。
1.4 Java 中的线程模型简介
线程是程序中的一个执行流。一个执行流是由 C}U 运行程序代码并操纵程序的数
据所形成的。因此,线程被认为是以 CPU 为主体的行为。在 Java 中线程的模型就是一
个 CPU、程序代码和数据的封装体。Java 中的线程模型包含三部分。
(1)一个虚拟的 CPU。
(2)该 C}U 执行的代码。
(3)代码所操作的数据。
二、系统需求分析
2.1 系统任务描述
本系统是采用 Java 基于 C/S 开发的聊天室。管理员在经过登录界而进入管理员界而,
即系统的服务器端并启动服务器后。此时一,如果有用户登录会在服务器端显示登录用户
的用户名和当前连接的用户人数,如果有用户聊天,服务器会显示出聊天信息。管理员在管
理界面中可以随时关闭服务器。此时,所有的客户端都将失去和服务器端的连接,从而,用
户所有的聊天信息发送将不成功。
用户只需要在登录界面中输入正确的用户名和密码即可登录聊天室并且连接上服务器。
在聊天室中,用户可以和聊天室中所有的用户发送信息,还可以接收所有用户发送的信息、,
可以杳看到当前服务器的状态。如果用户已经登录了聊天室,而服务器还没有启动,则用户
是不可以利用聊天室收发信息的。如果在运行过程中,服务器断开则系统会有提示。
2.2 系统功能分析
一. 系统的功能需求
聊天室程序通常需要完成以下一些基本功能:
(I)登录聊天室;
(2)启动服务器;
(3)关闭服务器;
(4)用户之间的聊天;
(5)退出聊天室。
本系统其体功能需求如下:
(1)聊天室管理员经登录界面登录到管理界而,即系统的服务器端。用户经登录界而
都进入聊天大厅。
(2)不论是管理员还是用户都需一要在登录界面输入正确的用户名和密码后才可以登录
到各自的界面中去。
(3)系统的两个主要界面都是为方便管理员和用户操作的。首先,管理员进入到管理
界而后可以方便的启动/停止服务器,看到在线用户的信息和聊人信息、。用户进入到聊天
大厅中可以聊天,查看服务器状态。
(4)一个用户退出聊天室对其他用户不能产生影响,而服务器断开与客户端的连接则所有
的用户都失去与服务器的连接。
(5)用户的聊天信息录入,重写,发送,接收方便,快捷。
(6)服务器状态,聊天信息和在线用户人数及时刷新。
(7)聊天室系统运行稳定、安全性高、性能可靠。
二.系统数据流图
系统的顶级数据流图如下图所示。
管理员的操作经过聊天室系统将反馈给管理员自己和用户。
情况 1:管理员启动服务器,管理员界面将出现用户连接信息和用户的聊天信息,用户
在登录后可以进入到聊天界面中。
情况 2:管理员停止服务器,管理员界面中所有的用户信息都将不再刷新,而用户所在
聊天界面都将有服务器停止的提示。
用户的操作经过聊天室系统将反馈给用户(包括自己)和管理员。用户的用户名,聊天信
息在管理员界面都可以显示出来。用户的聊天信息可以在自己和其他用户的界面上显示。
管理员界面 2 级数据流图:
3.系统可行性分析
从技术发面来看,Java 语言的优点一要表现在:简.单、面向对象、多线程、安全性
等方面。
1.简单性
Java 与 C++语言灰常相近,但 Java 比 C++简单,它抛弃了 C++中的一些不是绝对
必要的功能,如头文件、顶处理文件、指针、结构、运算符重载、多重继承以及自动强迫同
型。Java 实现了自动的垃圾收集,简化了内存管理的一作。这使程序一设计更加简便,同时
减少了出错的可能。
2.面向对象
Java 提供了简单的类机制和动态的构架模型。对象中封装了它的状态变量和方法,
很好地实现了模块化和信息隐藏;而类则提供了一类对象的原型,通过继承和重载机制,子
类可以使用或重新定义父类或超类所提供的一方法,从而既实现了代码的复用,又提供了一
种动态的解决方案。
Java 是一种完全面向对象的程序设计语一言,它除了数组、布尔和字符二个基本
数据类型外的其它类都是对象,它不再支持全局变量。在 Java 中,如果不创建新类就无法
创建程序,Java 程序在运行时必须先创建一个类的实例,然后才能提交运行。
Java 同样支持继承特性,Java 的类可以从其它类中继承行为,但 Java 只支持类的
单重继承,即每个类只能从一个类中继承。
Java 支持界面,界面允许程序员定义方法但又不立即实现,一个类可以实现多个
界面,利用界面可以得到多重继承的许多优点而又没有多重继承的问题。
3.多线程
多线程使应用程序可以同时进行不同的操作,处理不同的事件。在多线程机制中,
不同的线程处理不同的任务,他们之间互不干涉,不会由于一处等待影响其他部分,这样容.
易实现网络上的实时交互操作。
Java 程序可以有多个执行线程,如可以让一个线程进行复杂的计算,而让另一个线
程与用户进行交互,这样用户可以在不中断计算线程的前提下与系统进行交互。多线程保证
了较高的执行效率’、。
4.安全性
Java 不支持指针,一切对内存的访问都必须通过对象的实例变量来实现,这样就
防止了程序员使用欺骗手段访问对象的私有成员,同时也避免了指针操作中容易产生的错
误;
三、系统设计
系统设计是系统开发的重要阶段,它直接影响到目标系统的质量,是整个开发作的核
心。系统设计阶段的主要任务是:在系统分析提出的逻辑模型的基础上合理地进行物理模型
设计。
系统设计遵循的原则是:系统性、适应性、稳健性、经济性。
3.1 系统总体结构设计
本系统是用 Java 语言基于 C/S 开发设计的,其核心的 Socket 技术决定了该系统的
安全性和稳定性,从而保证了系统有较强的使用性。其最重要的功能就是实现了聊天信息的
快速性,改变了传统的面对面聊天信息不确定因素多,安全性低的状况。
服务器使用多线程,每个线程对应一个客户端,担线程通过客户代理同客户端交流,
在客户代理中有两个重要信息:一个是用户名,一个是用户名对应的 Socket。客户向服务器
请求连接后,客户代理的 Sockct 字段便被实例化,当用户登录后,客户代理的用户名宇段
被实例化,一个完整的客户代理生成了。对客户端来说用户名是可见的,客户端提供对用户
名的操作。对服务器端来说 Sockct 是可见的,服务器通过用户名操作 Sockct 进而回应客户
端的请求。
基于 C/s 的 Java 聊天室系统的作用是提供给人们一个平台进行相互交流,在交流的过
程中可能出现的情况也是不同的。因此,可将系统分成两大模块:
服务器端模块和客户端模块。