# JavaCourseDesign **Repository Path**: zhangxun233/java-course-design ## Basic Information - **Project Name**: JavaCourseDesign - **Description**: Java 课程设计之Socket 聊天室 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-06-19 - **Last Updated**: 2024-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # JavaCourseDesign #### 介绍 Java 课程设计之Socket 聊天室 ## **功能设计:** 【√】注册用户,登录 【√】添加联系人(通过账号) 【√】联系人列表 【√】发文字消息 【√】群功能:创建 【√】群功能:申请加入群 【√】群功能:聊天 【√】群功能:邀请用户入群(通过账号、联系人列表) 【√】群功能:成员列表 【 】群功能:踢出成员 【 】群功能:解散 【 】联系人在线状态 【 】群功能:群成员在线状态 【 】聊天:头像 【 】聊天:发送图片 ## **底层实现:** 服务端后端采用 Java 开发,客户端后端采用 C# 开发。 **注:以下服务器和客户端如没有特别说明均指服务器和客户端的后端。** 服务器采用多线程技术实现同时处理多个客户端的请求。 采用 Socket 技术进行通信,实现了用于 TCP 数据流的编码和解码器, **命令格式** 命令是由客户端发送给服务器的数据包名称。 所有命令的数据格式都以魔数(0x05 0x11 0x05 0x14)开头,然后接命令类型(一个byte),最后接附加数据(可以为空)。 附加数据为命令具体的内容。 对于Login和Register命令来说附加内容格式如下表所示: | 账号长度(int32) | 账号内容 | 密码长度(int32) | 密码内容 | | --------------- | -------- | --------------- | -------- | **回复格式** 回复是由服务器发送给客户端的数据包名称。 所有回复的数据格式都以魔数(0x05 0x11 0x05 0x14)开头,接命令类型(一个byte), 接消息长度(int32),接消息内容,最后接附加数据(可以为空)。 附加数据为回复具体的内容。 对于Login命令的回复来说附加内容如下表所示: | 操作是否成功?(一个byte,0表示失败,1表示成功) | | ----------------------------------------------- | 消息记录时间方面的小算法,对于每条消息都显示发送时间的话会让整个屏幕的消息密度减少。于是3分钟以内的消息都会被分为一组,只显示这一组消息的首条消息的发送时间。 对于今天的消息来说,只会显示小时和分钟,否则会在时间前面显示月份和天数,有一个例外就是对于昨天的消息会将月份和天数替换为昨天,对于前天的消息则替换为前天。