Java笔记之QQ聊天综合案例(三十)

发布于:2023-01-09 ⋅ 阅读:(177) ⋅ 点赞:(0)

学习目录

一、案例分析

需求分析

  1. 用户进行登录
  2. 显示在线的用户列表
  3. 用户进行无异常退出(客户端和服务端)
  4. 私聊
  5. 群聊
  6. 发文件
  7. 服务器推送新闻

涉及的技术

  1. 面向对象
  2. 网络编程
  3. IO流
  4. 多线程
  5. 集合(模拟数据库)
  6. 异常处理

原理分析

  1. 客户端(用户)和服务端(服务器)进行通信,客户端(用户)与客户端(用户)进行通信;在通信时,把数据封装到对象中,选择使用对象流的方式进行数据传输。
  2. 客户端和服务端 或 客户端与客户端在通信时都会产生两个socket,分别是对数据的写和读。如果一个服务端同时与两个或者多个客户端进行通信,那么就需要使用线程分组进行管理。如:客户端A与服务端通信,使用线程对它们两个socket进行管理;客户端B与服务端通信,再使用另外一个线程对它们两个socket进行管理。
  3. 如果客户端和服务端进行多个通信,那么就会产生多个线程,为了更好的管理线程,我们需要使用集合(如:HashMap)对多个线程进行管理。所以说一个集合里有多个线程,而每个线程都有一个socket,每个socket都对应一个数据通道

简单说明

服务端:

  1. 当客户端连接到服务器后,会得到一个socket
  2. 启动一个线程,该线程关联客服端的socket对象,也就是说socket是该线程属性
  3. 为了更好的管理线程,需要使用集合来管理

客户端:

  1. 和服务端通信时,使用对象方式 如:对象流来读写
  2. 当客户端与服务端连接后,也会得到socket
  3. 启动一个线程,该线程关联服务端的socket对象,也就是说socket是该线程属性
  4. 为了更好的管理线程,需要使用集合来管理

代码实现

链接:https://pan.baidu.com/s/1pfWGziDJJOXqRLEeLU3Kcw
提取码:qrso
在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到