TCP聊天系统开发心得

来源:互联网 发布:淘宝产品推广公司 编辑:程序博客网 时间:2024/05/17 09:18

最新做了一个基于TCP协议的模仿QQ聊天系统,用到的新的知识不是很多,都是以前开发项目的时候常用的知识点,该系统使用C++开发,采用MFC框架实现界面,网络那块只要是Socket的应用,因为登录功能和消息保存的功能,该系统还用到了SQL Server 2008来实现数据管理。

因为用到的新的知识不是很多,加上有之前的项目开发经验,该系统我只用了一天时间就实现了要求的功能,主要是一对一、一对多、多对多(群聊)的聊天功能,还有就是消息的保存和删除,比较困难实现的是文件的传输功能,这个主要是因为要另外应用Socket来实现,所以代码量就增多了不少。

虽然用到的新的知识不是很多,但其中开发过程中的细节还是值得总结一下,为以后开发项目提供经验。

1.在实现消息保存功能的时候,想到的是QQ聊天记录是自动保存在登陆QQ的设备上的,电脑登陆就保存在硬盘上,手机登陆就保存在内存卡上,如果开通了QQ漫游功能,可以将聊天记录保存在腾讯服务器上。所以我就采用比较简单的方式,就是使用数据库,因为这样操作也便于管理消息记录。

在这里,因为有一点之前没有接触,值得说明,向数据表中追加数据的SQL语句:

update表名 set msg=msg+'%s' where [name]='%s'

2.另外一点特别值得注意,在实现文件传输的时候,因为要首先发送文件名和大小信息,之前的代码:

// file tansport msg

else if (msg.Find(_T("fil")) == 0)// file tansport/from/msg

{

k = msg.ReverseFind('/');

infor = msg.Right(length - k - 1);

from = msg.Mid(4, k - 4);

manager.AppendShakeRecv(from, _T("向你发送文件--")+infor);

manager.FileRecv(from, infor);

}

其中的infor就是文件信息,因为发送的字符串以“/”为分隔符,例如:

pri/小明/你好 表示一对一聊天:向小明发送“你好“,

发送文件的时候以fil/小明/test.rar/267941

表示向小明发送文件test.rar,大小为267941字节。

服务器在解析消息的时候,要以“/”为分隔符截取字符串,因为文件信息为test.rar/267941这样增加了解析的难度,我在这里足足想了好几十分钟,也没实现截取,后来听了一个电话之后回来对着电脑,突然灵机一动,既然文件信息test.rar/267941为一个主体发送,我们最后收到之后才做近一步解析,所以就以test.rar|267941这样的方式发送,这样就不必再因为和前面的“/”的解析发生冲突,而近一步解析为文件名和大小就类似前面,问题一下子就解决了。

总之一点,那就是很多时候换一种方式想问题,从整体到局部,从大到小,问题往往得到很好的解决。

最后,还是说一下,开发项目很多时候代码也不是看得很懂,如果以后真的想往这些方向走的话,还是要注重代码的理解,但不懂不代表不可以做实战项目,整体上我们学会了,细节出问题的时候我们也能及时解决,这并不影响我们开发实战项目。做项目是需要及时总结和领会的,也是一条漫长的道路,需要及高难度的耐性和充沛的精力。

 

0 0
原创粉丝点击