最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

通信系统概要设计

来源:动视网 责编:小OO 时间:2025-10-02 00:08:47
文档

通信系统概要设计

1.设计一个即时通讯系统,C/S架构(CLIENT/SERVER)(B/S)–>(BROWSER/SERVER)2.功能设计(1)实现多用户同时登陆(并发)(2)用户登陆需要进行认证,用户密码在传输过程中需要进行加密(MD5)(3)用户可以获取聊天室列表(4)用户可以获取聊天室里的用户的列表(5)用户可以修改自己的密码和个人信息,用户的基本信息包括:用户账号、用户姓名、昵称、手机、邮箱、QQ、住址、地区、性别、年龄、生日(6)用户有好友管理功能,包括添加、删除好友、获取好友列表(7)用户有黑名
推荐度:
导读1.设计一个即时通讯系统,C/S架构(CLIENT/SERVER)(B/S)–>(BROWSER/SERVER)2.功能设计(1)实现多用户同时登陆(并发)(2)用户登陆需要进行认证,用户密码在传输过程中需要进行加密(MD5)(3)用户可以获取聊天室列表(4)用户可以获取聊天室里的用户的列表(5)用户可以修改自己的密码和个人信息,用户的基本信息包括:用户账号、用户姓名、昵称、手机、邮箱、QQ、住址、地区、性别、年龄、生日(6)用户有好友管理功能,包括添加、删除好友、获取好友列表(7)用户有黑名
1.设计一个即时通讯系统,C/S架构 (CLIENT/SERVER)(B/S) –> ( BROWSER/SERVER)

2.功能设计

(1)实现多用户同时登陆(并发)

(2)用户登陆需要进行认证,用户密码在传输过程中需要进行加密(MD5)

(3)用户可以获取聊天室列表

(4)用户可以获取聊天室里的用户的列表

(5)用户可以修改自己的密码和个人信息,用户的基本信息包括:用户账号、用户姓名、昵称、手机、邮箱、QQ、住址、地区、性别、年龄、生日

(6)用户有好友管理功能,包括添加、删除好友、获取好友列表

(7)用户有黑名单管理功能,包括添加、删除黑名单用户

(8)用户可以给指定的用户发送信息,也可以给当前聊天室所有的用户发送信息

(9)用户同一时刻只允许从一个地方进行登陆(当用户已登陆时,若该用户重复登陆,则断开前面已登陆的连接)

(10)用户可以在上线的时候接收其不在线时其他用户发送给他的消息

(11)当其他用户添加某用户为好友时,需要给该用户发送消息通知

(12)用户登陆、退出、修改用户资料、修改密码以及发送消息均需要进行记录数据库日志,方便查阅

3.系统设计

(1)服务器端在LINUX进行开发,使用开发语言C或C++

(2)服务器使用多线程来实现

(3)数据库操作接口需考虑周全,方便以后使用MYSQL或其它数据库

4.通讯协议

(1)所有的消息都由消息头+消息体组成

(2)消息头定义如下:

指令号(4字节整数)

消息序号(4字节整数)

会话号(4字节整数)

消息体长度(4字节)

指令号:表时该消息是什么请求

消息序号:依次自动增加

会话号:发送者或者接收者的会话号

消息体长度:不包含消息头

每条消息的总长度不允许超过1024字节

(3)消息定义

序号指令号指令说明定义应答
1REQ_AUTH认证指令0x00001 0x80001
2REQ_LIST_ROOM获取聊天室列表0x00002
3REQ_ENTER_ROOM进入某个聊天室0x00003
4REQ_ADD_FRIEND添加用户到好友或黑名单0x00004
5REQ_LIST_FRIEND列出好友和黑名单列表0x00005
6REQ_LIST_ROOM_USER列出某个聊天室的用户列表0x00006
7REQ_SEND_MESSAGE向某个或一组用户发送消息0x00007
8REQ_DEL_FRIEND从好友或黑名单中删除用户0x00008
9REQ_FRIEND_ONLINE好友上线通知消息0x00009
10REQ_PASSIVE_ADD添加好友通知0x0000A

11REQ_GET_USERINFO获取用户信息0x0000B
12REQ_UPDATE_USERINFO更新用户信息0x0000C

13REQ_LEAVE_ROOM离开房间(会话组)

0x0000D
13REQ_QUIT退出0x00080
5.消息详细定义

(1)认证请求消息体

Sruct  AuthReq{

    Char username[16]

    Char code[8];

    Char encryptStr[32];

};

加密步骤:

a)客户端通过gettimeofday函数获取当前电脑时间,组成8字节的一个随机串RANDON_KEY

b)对用户密码进行MD5(“密码”)加密,得到字符串MD5_STR

c)定义8字节的公共密钥PUBLIC_KEY=“0x19, 0x38, 0x11, 0x05, 0x86, 0xa3, 0xf7, 0x81”,与RANDON_KEY一起组成16字节的加密密钥FINAL_KEY

d)使用AES算法,对MD5_STR进行加密,使用密钥FINAL_KEY,ENCRYPT_STR=AES(FINAL_KEY, MD5_STR);

认证成功,服务器应答:

Struct AuthResp {

    uint32_t sessionID;

}

(2)获取聊天室列表

获取聊天室列表请求无消息体

服务器应答:N个RoomInfo结构体

Struct RoomInfo {

    int number;             //房间编号,为数字

    char roomName[32];      //房间名字

    int capacity;            //最大用户数

    int userCount;          //当前用户数

}

(3)进入房间(加入会话组)

请求的结构体

struct EnterRoom {

    int roomID;

};

返回结构体:

struct EnterRoom {

    int roomID;

};

(4)获取房间用户列表

请求:

struct ListRoomUser {

    int roomID;

};

返回消息体:

房间号SessionInfo 1SessionInfo 2SessionInfo 3….
Struct SessionInfo {

    int sock;                //用户套接字

    char userName[32];     //用户名

    char realName[32];     //用户昵称

    uint32_t sessionID;        //用户会话号

    int status;                //用户状态

    int roomID;            //房间号

}

(5)添加用户到好友或黑名单

(6)添加用户到好友或黑名单

(7)向某个用户或一组用户发送消息

请求消息体:

接收者类型接收者消息类型消息时间消息长度消息内容
struct UserMessage {

    uint32_t receiptorType;

    uint32_t receiptor;

    uint32_t msgType;

    uint32_t msgTime;

    uint32_t msgLen;

    char *msg; //最大长度不超过500字节

};

接收者类型:4字节,1-普通用户,2-群用户(如整个房间的人)

接收者:4字节整数,若为普通用户,则此处为接收者的用户ID,若为群用户,则填入群ID(如房间ID),当服务器向客户端发送消息时,此处接收者则为客户端对应的用户ID

消息类型:4字节,1表示私密信息,0表示一般消息

消息时间:4字节整数,为1900年开始到现在的秒数

消息长度:4字节整数,表示随后的消息内容的字节数,不能超过500字节

消息内容:要发送的消息的内容

(8)离开房间(离开会话组)

请求的结构体

struct EnterRoom {

    int roomID;

};

返回:

struct EnterRoom {

    int roomID;

};

(9)

6.错误号定义

错误号说明
0x0000001用户名不存在
0x0000002用户密码不正确
0x0000003系统访问数据库失败
0x0000004用户无权限执行此操作
7.遗留问题

(1)Sqlite的互斥锁的问题

(2)队列访问互斥锁的问题

(3)线程允许打开的文件数问题

(4)线程堆栈空间分配问题

(5)信号处理问题

(6)

8.数据库设计

(1)用户表:user

字段名字段类型字段说明
idbigint自增长的ID,每个用户唯一

主键
nameVarchar()用户账号名,在表中唯一索引列
passwordVarchar()用户密码,使用md5加密保存

nicknameVarchar()用户昵称
realnameVarchar()用户真实姓名 

mobileVarchar(20)用户手机号码
provinceVarchar(20)所在省份
cityVarchar(20)所在城市 

emailVarchar()邮件地址
qqVarchar(20)QQ号码

genderChar(2)用户性别,’M’-男,’F’-女

birthVarchar(20)用户生日,格式为:yyyy-mm-dd

roleint用户级别,1-普通用户,2-VIP会员,3-钻石VIP会员,5-管理员

statusint用户状态,0-未通过验证,1-正常,2-已注销

(1)

(2)房间表:room

字段名字段类型字段说明
idbigint自增长的ID,每个房间唯一

主键
nameVarchar()房间名称,在表中唯一索引列
max_userint房间允许的最大用户数
cur_userInt当前用户数
(3)用户会话表:session

字段名字段类型字段说明
user_idbigint用户的ID,与user表中的id对应

主键
sessionidbigint用户会话号索引列
sock_fdint会话的套接字描述符
room_idInt用户所在房间的id,与room表的id对应

start_timeUnsigned int会话开始的时间,为1900年到现在的秒数

(4)用户日志表:userlog

字段名字段类型字段说明
idbigint自增长ID

主键
user_nameVarchar(20)用户账号,与user表中的name对应

索引
actionint1-登陆,2-密码验证失败,3-退出,4-发送消息,5-添加好友,6-修改密码,7-修改资料,8-删除好友

objectVarchar()事件操作的对象
paramVarchar()用户事件的参数
log_timeint记录日志的时间,为1900年到现在的秒数

(5)

9.

文档

通信系统概要设计

1.设计一个即时通讯系统,C/S架构(CLIENT/SERVER)(B/S)–>(BROWSER/SERVER)2.功能设计(1)实现多用户同时登陆(并发)(2)用户登陆需要进行认证,用户密码在传输过程中需要进行加密(MD5)(3)用户可以获取聊天室列表(4)用户可以获取聊天室里的用户的列表(5)用户可以修改自己的密码和个人信息,用户的基本信息包括:用户账号、用户姓名、昵称、手机、邮箱、QQ、住址、地区、性别、年龄、生日(6)用户有好友管理功能,包括添加、删除好友、获取好友列表(7)用户有黑名
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top