我一直都想编一个自己的聊天软件,像QQ那种;最近有时间我就自己编了一个。编写的过程中收获很大……
现在拿出来跟大家分享,有兴趣的朋友可以和我交流交流。
我编写的这个软件分三步分组成:数据库部分、服务器部分、客户端部分。实现的过程中采用MVC模式。
整个系统中的核心部分在于服务器端接收用户请求、解析请求、处理请求;客户端接收服务器消息、解析消息、处理并显示消息。
下面定义了本系统客户端与服务器端通信的请求码:
客户端请求码与服务器返回结果:
00:登录 例如:00:123,123 表示用户账号123,密码123请求登录;登录成功服务器会给客户端发送:
>>>00:123,123
>>>001:123,Tom;120,Yuan;124,John;&$119,123;&$120,123,2016-9-11 15:24:11,你好;120,123,2016-9-11 15:25:11,你好;120,123,2016-9-11 15:26:11,你好;
返回的信息被&$分成三段,第一段表示用户本身与好友列表,第二字段表示收到119申请添加好友的请求,第三段表示离线消息。每段内的记录以‘;’分隔;每条记录里的参数以‘,’分隔;
10:查询与指定好友的历史消息 10:120,119 表示查询120与119的聊天记录;返回示例:
>>>10,120,119
>>>101:120,119,2016-1-12 0:00:00,hello;120,119,2016-8-10 0:00:00,你好;120,119,2016-8-10 0:00:00,你好,我是120;120,119,2016-8-10
0:00:00,nihao;120,119,2016-8-10 0:00:00,nihao;120,119,2016-8-10 0:00:00,nihao;120,119,2016-8-10 0:00:00,213213;119,120,
2016-8-10 0:00:00,你好;119,120,2016-8-10 0:00:00,hello;119,120,2016-8-10 0:00:00,Hi;119,120,2016-8-10 0:00:00,hello
;119,120,2016-8-10 0:00:00,hi;119,120,2016-8-10 0:00:00,哈哈; 每条历史消息以‘;’为间隔。
11:点对点发msg 11:120,119,2016-7-16 10:10:10,hello 表示120给119发送点对点消息“hello”,时间为2016-7-16 10:10:10
12:群发好友msg 12:120,120,2016-7-16 11:11:11,大家好,我是120 表示120给所有好友群发消息,与点对点发消息有所不同的是这里的接收方发送方都是自己账号;
13:删除历史消息 13:120,119 表示120请求删除与119的聊天记录;这里需要注意的一点是,用户删除聊天记录是仅仅是把数据库中消息表中的d字段置0了,用户查询历史聊天记录时也会检查d字段,对于那些d字段为0的消息是检索不到的,就好像自己把它已经删除了一样;
20:获得好友列表 20:120 表示请求120的好友列表
>>>20:120
>>>201:122,Yaze;123,Tom;130,M;
21:添加好友 21:120,130 表示120请求添加130为好友,服务器端就会根据可以请求在数据库表failrelation(未确认好友关系表)中创建一条记录;
22:删除好友 22:120,119 表示120删除好友119,服务器端根据请求会在relation表中删除相应记录,并对在用用户进行通知;
23:确认添加好友 23:130,120 表示130同意添加120为好友,服务器端会删除相应的failrelation记录,并在relation中添加一个记录(添加时调整id顺序,使其检索方便,这里是使数值小的id放在前面);
30:更改用户名 30:120,Yozane,120 表示把账号120的用户名更改为Yozane,返回修改后的用户信息
>>>30:152,jiaGu,170
>>>301:152,jiaGu,170
31:更改用户密码 30:120,新密码,旧密码
>>>31:152,152,170
>>>301:152,jiaGu,152
40:注册新用户 40:Tommy,130 表示申请注册用户名为Tommy,密码为130的用户。
示例:
>>>40:Jia,170
>>>401:152,Jia,170