聊天室系统设计报告
聊天室系统 青青 岛岛 科科 技技 大大 学学 操操 作作 系系 统统 课课 程程 设设 计计 学生班级学生班级计算机 132 班 学生学号学生学号 学生姓名学生姓名王永远 185 月 ___ ______2016 年 ___日 1 1 聊天室系统 目录目录 设计题目聊天室系统3 一、设计目的及要求.3 1.1 设计目的.3 1.2 设计要求.3 二、技术背景.3 2.1 网络编程.3 2.2 网络通信.3 2.3 Socket3 2.4 TCP 传输.4 2.5 Java 的多线程机制.4 三、需求分析.4 3.1 客户端.4 3.1.1 登录4 3.1.2 多人聊天4 3.1.3 单人聊天5 3.2 服务器端.5 四、总体设计.5 4.1 设计思想流程图.5 4.2 设计思想分析.6 五、详细设计.6 5.1 客户端设计.7 5.1.1 登录界面7 5.1.2 聊天室界面7 5.1.3 单人聊天界面7 5.2 服务器端设计.8 六、系统测试.8 6.1 登录测试.8 6.1.1 用户名为英文字母8 6.1.2 用户名为中文9 6.1.3 用户名为标点符号9 6.1.4 多个用户有重名10 6.1.5 服务器地址不合法 11 6.1.6 端口号不合法12 6.1.7 服务器未开启12 6.2 群发消息测试.13 6.3 私聊测试.15 6.4 用户列表显示测试.16 七、心得体会.16 八、参考资料.16 九、程序清单.16 2 2 聊天室系统 设计题目设计题目 聊天室系统聊天室系统 一、设计目的及要求一、设计目的及要求 1.11.1 设计目的设计目的 通过该聊天室系统,掌握网络编程的概念及基于网络的C/S 模式软件系统开发,掌握基于 TCP 协议的 Socket 编程,掌握 Java 的多线程机制。 1.21.2 设计要求设计要求 实现多个用户之间类似于 QQ 的聊天程序,有聊天界面,多用户之间既可以实现群聊,也可以 单独聊天。 二、技术背景二、技术背景 2.12.1 网络编程网络编程 就是用来实现网络互连的不同计算机上运行的程序间可以进行数据交换。 2.22.2 网络通信网络通信 (1)IP 地址网络中设备的标识,不易记忆,可用主机名 要想让网络中的计算机能够互相通信,必须为每台计算机指定一个标识号,通过这个标识号来指定 要接受数据的计算机和识别发送的计算机,在TCP/IP 协议中,这个标识号就是IP 地址。 (2)端口号用于标识进程的逻辑地址 物理端口 网卡口 逻辑端口 我们指的就是逻辑端口 A每个网络程序都会至少有一个逻辑端口 B用于标识进程的逻辑地址,不同进程的标识 C有效端口065535,其中 01024 系统使用或保留端口。 (3)传输协议通信的规则,常见的有UDP,TCP UDP将数据源和目的封装成数据包中,不需要建立连接;每个数据报的大小在限制在 64k;因无 连接,是不可靠协议;不需要建立连接,速度快。 TCP建立连接,形成传输数据的通道;在连接中进行大数据量传输;通过三次握手完成连接,是 可靠协议;必须建立连接,效率会稍低。 2.3 Socket2.3 Socket (1)Socket 套接字 网络上具有唯一标识的 IP 地址和端口号组合在一起才能构成唯一能识别的标识符套接字。 (2)Socket 原理机制 A通信的两端都有 Socket。 B网络通信其实就是 Socket 间的通信。 C数据在两个 Socket 间通过 IO 传输。 3 3 聊天室系统 2.4 TCP2.4 TCP 传输传输 (1)客户端思路 A 建立客户端的 Socket 服务,并明确要连接的服务器。 B 如果连接建立成功,就表明,已经建立了数据传输的通道.就可以在该通道通过IO 进行数据的读取和 写入.该通道称为 Socket 流,Socket 流中既有读取流,也有写入流. C 通过 Socket 对象的方法,可以获取这两个流 D 通过流的对象可以对数据进行传输 E 如果传输数据完毕,关闭资源 (2)服务器端思路 A 建立服务器端的 socket 服务,需要一个端口 B 服务端没有直接流的操作,而是通过 accept 方法获取客户端对象,在通过获取到的客户端对象的流 和客户端进行通信 C 通过客户端的获取流对象的方法,读取数据或者写入数据 D 如果服务完成,需要关闭客户端,然后关闭服务器,但是,一般会关闭客户端,不会关闭服务器,因为服 务端是一直提供服务的 2.5 Java2.5 Java 的多线程机制的多线程机制 进程每个进程都有独立的代码和数据空间(进程上下文) ,进程间的切换会有较大的开销,一个进 程包含 1--n 个线程。 线程同一类线程共享代码和数据空间,每个线程有独立的运行栈和程序计数器PC,线程切换开 销小。 多进程是指操作系统能同时运行多个任务 (程序) ,多线程是指在同一程序中有多个顺序流在执 行。在java 中,每次程序运行至少启动2 个线程。一个是main 线程,一个是垃圾收集线程。因为每 当使用 java 命令执行一个类的时候,实际上都会启动一个JVM,启动 JVM 实际上就是在操作系统 中启动了一个进程。在 java 中所有的线程都是同时启动的,至于什么时候,哪个先执行,完全看谁 先得到 CPU 的资源。 三、需求分析三、需求分析 实现聊天的功能,采用 Java Socket 编程,服务器与客户端采用了 TCP/IP 连接方式,在设计聊 天方案时,可将所有信息发往服务器端,再由服务器进行处理,服务器端是所有信息的中心。 3.13.1 客户端客户端 3.1.13.1.1 登录登录 用户需要填写用户名、服务器地址、端口号才可以进入聊天室与在线用户聊天,此外,服务器 地址默认是本机地址,端口号默认是5000。用户名可以中文,英文字母或标点符号,服务器地址必 须是符合点分十进制的合法地址,端口号可以修改,但服务器端程序内默认端口号也必须修改。该 聊天室不需要注册,直接登录即可聊天,退出后,系统不保留用户任何信息。 若新登录用户与在线用户的用户名重名,则系统会自动修改用户名。格式为用户名“_客户 端线程 ID” 。 3.1.23.1.2 多人聊天多人聊天 每个在线用户都可以发送聊天信息,服务器端会一直监听,并把每一个在线用户发送的聊天信 4 4 聊天室系统 息转发到每一个客户端。 聊天室的聊天信息格式为 用户名 时间(yyyy-MM-ddHHmmss) 聊天信息 3.1.33.1.3 单人聊天单人聊天 用户可以选择某一个在线用户实现单人聊天,该聊天信息不会在聊天室显示,只有单聊的两个 人能够看到。 单人聊天的聊天信息格式为 用户名 时间(yyyy-MM-ddHHmm) 聊天信息 3.23.2 服务器端服务器端 服务器端主要处理客户端的请求,包括用户的登录,发送多人聊天信息,退出聊天室,单人聊 天请求,发送单人聊天信息,并且随时更新在线用户列表。 四、总体设计四、总体设计 4.14.1 设计思想流程图设计思想流程图 Server 服务器端 Client 客户端 创建ServerSocket 启动服务器 等待并接受客户