局域网LanQQ聊天项目(一)数据库与通信协议设计

        在做项目之前要把整体框架搭好,对于这个项目而言,数据库的设计与服务器和客户端之间的通信协议制定至关重要。

        数据库而言,数据库的制定要考虑全面,如果在中途写代码的时候发现,发现数据库表设计不合理或者是缺少字段,这样严重影响项目的进度,会做很多无用功,因此在写代码之前,一定要把数据库设计的合理、完整。

        对于这个项目主要是客户端和服务器之间的通信,通信协议是比较多的,这个项目我们是四个人一起做、写服务器的和写客户端的是不同的人,因此这个协议事先一定要商定好,组员之间要多沟通、多交流。

一、数据库设计

        下面是我设计的数据库表。

-- 存放所有已经注册用户的信息
CREATE TABLE tbl_register_users
(
	name VARCHAR(20) NOT NULL PRIMARY KEY,  -- 主键
	passwd VARCHAR(20) NOT NULL,
	socketfd INT NOT NULL,
	is_online  TINYINT  NOT NULL,-- 是否在线 0 不在线  1 在线
	is_used TINYINT NOT NULL, -- 该文件描述符现在是否被用 0 没有被占用 1 被占有
    securiety VARCHAR(30) NOT NULL,  -- 密保
    isOfflineMsg TINYINT NOT NULL -- 0 没有, 1 有离线消息
)ENGINE=InnoDB,CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';

-- 存放被禁言的用户,当禁言时间到了之后,就要把用户从禁言列表里面删除
CREATE TABLE tbl_gag_users
(
	gag_name VARCHAR(20) NOT NULL PRIMARY KEY,  -- 主键
	gag_minutes INT NOT NULL -- 禁言时间
)ENGINE=InnoDB,CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';


-- 存放被管理员删除的用户,已经被加入该列表的用户,不能再注册
CREATE TABLE tbl_del_users
(
	del_name VARCHAR(20) NOT NULL PRIMARY KEY -- 主键
)ENGINE=InnoDB,CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';

-- 存放某个用户和他的好友的信息
CREATE TABLE tbl_users_friends
(
	name VARCHAR(20) NOT NULL ,  	
	friend_name VARCHAR(20) NOT NULL,	
	CONSTRAINT pk_friend_name PRIMARY KEY (name,friend_name)  -- 组合键作为主键
)ENGINE=InnoDB,CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';


-- 存放某个用户和他的QQ群的信息
CREATE TABLE tbl_users_groups
(
	name VARCHAR(20) NOT NULL ,  
	group_name VARCHAR(20) NOT NULL,	
	CONSTRAINT pk_group_name PRIMARY KEY (name,group_name)  -- 组合键作为主键
)ENGINE=InnoDB,CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';

-- 存放敏感词的信息
CREATE TABLE tbl_sensitive_words
(
	sensitive_word VARCHAR(30) NOT NULL PRIMARY KEY -- 主键
)ENGINE=InnoDB,CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';

-- 超级用户数据库表
CREATE TABLE tbl_super_users
(
	super_name VARCHAR(20) NOT NULL PRIMARY KEY, -- 主键
	passwd VARCHAR(20) NOT NULL
)ENGINE=InnoDB,CHARACTER SET 'gbk' COLLATE 'gbk_chinese_ci';

INSERT INTO tbl_sensitive_words VALUES('ddd'),('ssss'),('eee');


二、通信协议

        下面是客户端向服务器注册用户的消息格式(标识类型是"01"):

        

标识类型

(2字节)

名字长度

(2字节)

名字

密码长度

(2字节)

密码

 

 

 

 

 


因为通信协议是比较多的,我把我我们用到的标识类型在下面写一下。

客户端:
	01 客户端-->服务器:注册用户
	11 服务器-->客户端:给客户端返回注册是否成功的信息
		111 :注册成功
		112:该用户名已经注册
		113:用户名已经删除

	02 客户端-->服务器:用户登录
	12 服务器-->客户端:给客户端返回登录是否成功的信息
		121:登录成功
		122:密码错误
		123:登录的用户已经在线
		124:用户名不存在
加好友:	
	07 客户端A-->服务器:申请加好友
		
	39	客户端B->服务器:同意A加自己好友
	40  客户端B-->服务器:拒绝A加自己好友
	41  服务器-->客户端B:A要加自己好友
	42:服务器-->客户端A:自己申请加好友的信息
		0:B拒绝加自己
		1:B同意加自己
	99:B用户名不存在
	
加群:
	08 客户端-->服务器:申请加群
	
	96:添加的群组不存在
	
单聊:
	04:客户端A-->服务器:聊天信息
	19: 服务器-->客户端A: 告诉用户你被禁言
	
	14: 服务器-->客户端B:你有单聊消息发送过来
	
找回密码:
	03 客户端-->服务器:
	13 服务器-->客户端:找回密码
		1:修改成功
		2:密保错误
		3:输入的用户名错误
		
传文件:
	89 客户端A-->服务器 文件
	90 服务器-->客户端B 文件
	
	71 服务器-->客户端A 用户不在线
	72 服务器-->客户端A 文件传输成功
	
群聊:
	06 客户端A-->服务器:群聊信息
	15 服务器-->客户端B:把群聊的信息发送过去
	
登录:	
	18 服务器-->客户端:给用户发送它的所有好友列表
	20 服务器-->客户端:给用户发送它的群列表
	
	
查看消息记录:
	98 客户端A-->服务器 查看自己私聊的聊天记录 2A
	97 服务器-->客户端A:自己的聊天记录  73 

后台管理:
	22 管理员客户端 -->服务器: 超级用户登录
	23 服务器-->管理员客户端:  返回所有的敏感词
	
	26 管理员客户端 -->服务器: 禁言用户
	25 管理员客户端 -->服务器: 删除用户(当用户不在线的时候,才可以删除)
	
	27 管理员客户端 -->服务器: 敏感词增加
	28 管理员客户端 -->服务器: 敏感词删除
	
	29 管理员客户端 -->服务器:信息广播

	30 服务器-->管理员客户端:  返回超级用户登录
	
	31 服务器-->管理员客户端:  返回注册的所有用户
	32 服务器-->管理员客户端:  返回注册的群组

整体框架的设计:http://blog.csdn.net/u010889616/article/details/48413629

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dmfrm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值