e起聊的项目文档

目录

 

1.项目名称:

2.项目背景:

3.项目描述:

4.项目需求list:

5.项目实现:

5.1相关技术:

5.2实现思路

5.2.1服务端实现

5.2.2客户端具体实现:

7.功能BugList:

8.项目总结:


1.项目名称:

e起聊

2.项目背景:

将JavaSE的所学知识应用于实践,完成一个聊天工具的实现。

3.项目描述:

创建客户端和服务端,客户端利用写线程向服务端发送数据,并且利用读线程来接收服 务端发送的消息,服务端利用线程池调度执行服务器不客户端业务(注册、登录、私聊、群聊、设置密码、退 出功能)的逻辑处理。

4.项目需求list:

序号

功能名称

功能需求详述

1

注册

一个用户只能注册一次,当用户多次注册时,给出提示。

2

登录

① 若用户未注册,提示用户先注册;

② 若用户已经注册,登录

③ 一个用户只能登录一次,若重复登录给出提示

④ 登录时,密码/账号输入错误,登录给出提示

3

设置密码

① 密码长度需求:6<=密码长度<=15

② 密码格式要求:目前要求为字母数字组合

4.

私聊

用户A:

e起聊的项目文档_第1张图片

用户B:收到用户A的消息,给出回复

 

5.

群聊

① 用户A群发消息,当前所有人都能看到

② 群里边的在线人数上限为100人

6.

消息内容

① 消息内容不能为空

② 目前消息内容仅支持简单的文字

5.项目实现:

5.1相关技术:

Socket编程

多线程

Java基础

5.2实现思路

5.2.1服务端实现

多个用户(客户端)互发消息时,不是直接发送给对方,而是要先发给服务器,在由服务器发送给目标用户,因为同一时间间隔连接在服务器上的客户端可以有很多个,而服务器要对这些客户端所发送的消息都要进行处理,那么我们可以将每一个客户端看作是一个线程,而类似于多线程同一时间间隔访问服务器这种情况,选择线程池处理再合适不过了,说到这里那么还要聊一下线程池的优点:

(1)降低资源消耗:通过重复利用已创建的线程降低线程创建和销毁带来的消耗;

(2)提高响应速度:当任务到达时,任务可以不需要等待线程创建就能立即执行;

(3)提高线程的可管理性:使用线程池可以统一进行线程分配、调度和监控

服务端的具体实现步骤:

(1)服务器实例化一个ServerSocket对象,通过服务器的端口来进行通信;

(2)因为ServerSocket类里边有一个accept()方法,该方法会阻塞式等待,直到客户端连接到服务器上给定的端口;

(3)accept()方法会返回一个新的socket引用,该socket连接到客户端的socket

当利用套接字将客户端与服务端的连接建立好之后,通过使用I/O流进行通信。

具体业务的实现:

e起聊的项目文档_第2张图片

5.2.2客户端具体实现:

(1)客户端实例化一个Socket对象,将客户端连接到指定服务器和端口

(2)利用写线程向线程向服务端发送数据;

(3)利用读线程读取服务端的数据;


6.测试case:

e起聊的项目文档_第3张图片

 

7.功能BugList:

Bug 预期结果 实际结果 状态
同一个用户注册成功之后,再次注册 给出【已注册】的提示 未给出 已解决
用户未注册,进行私聊,群聊,登录 提示用户先注册 未给出 已解决
用户名为空注册 注册失败,并提示用户 未提示 已解决
设置密码 期望对密码加密 明文 正在修复
发送内容为空 禁止发送并给出提示 未给出提示 已解决
       
       


8.项目总结:

通过这个简单的小项目,检查了自己对JavaSE知识的一个掌握程度,同时也真正动手测试了一下项目,因为对这个项目的测试主要为功能测试,觉的这个项目可扩展的地方还挺多的:

(1)现在的数据只是存储在ConcurrentHashMap之中,不具有持久性,考虑数据持久性的话,应存储在数据库中;

(2)发送的消息中对一些敏感数据应特殊处理:比如银行卡号,应该设置加敏或禁止发送;

(3)群聊中设置管理员和普通群成员;

 

 

 

你可能感兴趣的:(e起聊的项目文档)