轻聊 - 聊天室的设计思路

1.写在前面

学完Java后,一方面为了巩固知识,另一方面也是看看自己对知识的掌握程度,所以动手写了一个小型Java项目 - 简易聊天室。它是一个可以实现多人通讯功能的简单项目。因为是第一次自己写项目,所以并没写的特别复杂,只是简单实现了注册、群聊、私聊、退出功能。

2.整体思路

我在该项目里采用的是C/S架构。它的编程包括客户端编程和服务器端编程两部分。

整体架构考虑好以后,模拟一下整个聊天过程:甲连接到服务器并注册好以后,编辑一条消息,输出到服务器,再由服务器判别是群聊还是私聊后,根据情况转发。结束聊天后下线,由客户端断开连接。

3.功能模块

轻聊 - 聊天室的设计思路_第1张图片 聊天室功能模块图

4.功能分析

(1)对于客户端来说:需要两个线程实现读写分离,做到读时能写、写时能读。

  • 读线程读取服务器发来的消息。
  • 写线程的功能有两个:1)读取键盘输入并发给服务器;2)控制客户端的关闭。

(2)对于服务器来说:

  • 因为是多人通讯功能,所以每当有一个客户端连接到服务器,都有创建一个线程来处理此客户端的请求。
  • 当客户端连接成功时,服务器还要处理客户端发来的消息,因此我定义了如下规则:

       1)userName:用户名:表示注册用户

       2)G:消息内容:表示发送群聊消息

       3)P:用户名A-消息内容:表示给用户名A发送私聊消息

       4)byebye:表示退出,关闭客户端连接

5.编码实现

源码地址:https://github.com/Ahiahiahia/project/tree/master/chat-room

6.涉及技术

类、接口

多线程

I/O操作(Scanner、PrintStream)

Socket编程

7.开发环境

Windows、Maven、IDEA

8.项目测试

(1)划分等价类

  • 有效等价类:

轻聊 - 聊天室的设计思路_第2张图片

  • 无效等价类:

          1)其他消息(不包含关键字):服务器不做处理,测试成功。

          2)其他内容(图片、文件、...):服务器不做处理,测试成功。

          3)发送空消息:服务器不处理

          4)私聊对象不在线:服务器不处理

(2)边界值分析

          1)最大消息长度:无限制

          2)最短消息长度:1(长度为0不处理)

          3)最多在线人数:19(第20个客户端连接被拒绝)

          5)最多群聊人数:19(只能有19个客户端)

(3)异常点测试

          1)连接突然断开:客户端中断,无法使用功能

          2)客户端非正常退出(手动关闭客户端):客户端无法使用,服务器正常工作。

          3)服务器非正常关闭(手动关闭服务器):服务器关闭,所有客户端随之关闭,无法使用。

9.扩展思路

图片、文件发送

保存用户信息(我的好友、我的群组)

历史记录

用户界面

显示在线好友、显示我的群组

删除好友、退出群组

最长消息现在、最短消息限制、最多群聊人数

发送离线消息

(以上扩展功能等待后期实现)

 

 

你可能感兴趣的:(project,简易聊天室,JavaSE)