上一次大概学习了cs架构是什么东西。这次可以着手来实现一个小项目,做一个低配版QQ。

大概需要设计实现双方通信,先画个大纲。

项目架构

server:接收客户端A的消息,然后转发给目的客户端B

  1. server:做server相关任务调度。连接查询请求的客户端——启动界面——循环监听消息。
  2. serverUI:服务器端的界面设计。
  3. serverListener:服务器端界面的监听器。
  4. serverReceiveMsg:服务器端接收客户端发送的消息。

client:多个客户端,相互发送消息但是要经过服务器端的转发

  1. client:完成一个客户端执行任务的调度。连接服务器端——启动界面——循环监听服务器端发送的消息。
  2. clientUI:客户端的界面设计。
  3. clientListener:客户端界面对应的监听器。
  4. clientReceiveMsg:客户端接收服务器端的消息。

业务逻辑细节

  1. 数据包封装:协议规则:send客户端ID【int】+send客户端name【String】+receive客户端ID+receive客户端name【String】+消息类型【byte】+时间【String】+消息【具体类型具体定义】
  2. 每个客户端在启动发起与服务器端的链接的时候,要增添登录功能,包装name和ID(身份识别,独一无二),online(在线标记)。,将该信息发送给服务器端,服务器端维护所有用户的Table将信息保存下来。(需要永久保存的时候设计数据库交互)
  3. 服务器端收到消息之后要将消息先读到缓冲区并记录是给谁的消息,查询客户端是否在线,在线即发送消息,否则保存,等待客户端上线之后发送。(循环消息等客户端上线,or客户端上线之后遍历消息缓存)。
  4. 每个客户端除了个人信息还需要维护好友列表。
  5. 客户端发送消息之前选择好友列表中的好友,然后才可以发送消息。发送消息格式需要提前选择。涂鸦消息需要另外设计涂鸦面板,在原面板中保留区域还是另外弹出(需要保存原面板数据,然后用于恢复)。
  6. 消息发送之后双方界面需要同步显示。
  7. 不同好友聊天记录是否需要切换面板以及记录保存。
  8. 待拓展功能:加好友,发送图片,文件等消息。

界面&功能设计细节

  1. 发送:发送消息给服务器端——服务器转发给客户端。
  2. 清空:清空输入区域(涂鸦板)。
  3. 清空聊天记录:清空聊天记录区。
  4. 涂鸦:选择涂鸦板。(选择一次转换发送消息的模式为涂鸦,再次转换关闭涂鸦模式)
  5. 其他消息模式功能键。
  6. 示意图:

java有什么小项目 java小项目开发实例_网络通信

【后续将不断补充+修正】

代码练习:

目前实现的部分是:

一个客户端和服务器端进行交流,暂时还没有实现服务器端的中转功能。

代码链接:

https://github.com/Biangbangbing/VMeeting/tree/v1.0

遇到的问题&解决方案:

  1. 涂鸦板实现:另外开辟固定区域。(目前先避免缓存界面大量数据的复杂工作)
  2. 开始没有在监听器的构造函数中判别UI传来的画笔的时候涂鸦总报画笔为空。(原因待解决)