毕业论文论文范文课程设计实践报告法律论文英语论文教学论文医学论文农学论文艺术论文行政论文管理论文计算机安全
您现在的位置: 毕业论文 >> 课程设计 >> 正文

C++聊天室系统源代码 第3页

更新时间:2010-3-21:  来源:毕业论文
C++聊天室系统源代码 第3页
3)数据包和通信协议的定义
 1、数据包格式
在使用TCP协议进行网络通信是,一个需要解决的最基本的问题就是粘包。
    TCP粘包是指发送方发送的若干包数据到接收方接收时粘成一包,从接收缓冲区看,后一包数据的头紧接着前一包数据的尾。
出现粘包现象的原因是多方面的,它既可能由发送方造成,也可能由接收方造成。发送方引起的粘包是由TCP协议本身造成的,TCP为提高传输效率,发送方往往要收集到足够多的数据后才发送一包数据。若连续几次发送的数据都很少,通常TCP会根据优化算法把这些数据合成一包后一次发送出去,这样接收方就收到了粘包数据。接收方引起的粘包是由于接收方用户进程不及时接收数据,从而导致粘包现象。这是因为接收方先把收到的数据放在系统接收缓冲区,用户进程从该缓冲区取数据,若下一包数据到达时前一包数据尚未被用户进程取走,则下一包数据放到系统接收缓冲区时就接到前一包数据之后,而用户进程根据预先设定的缓冲区大小从系统接收缓冲区取数据,这样就一次取到了多包数据。
和粘包类似,发送方一次发送的数据,接受方也可能分成多次来接收。

   为了解决上述问题,实现准确的接受数据包,需要为数据包设置一定的机构,如下:
   1、数据包大小占4字节,值为 4+n 字节
   2、数据包类型占4字节,值为包的类型
   3、数据占n字节,内容内传输的数据

  在接受数据包时,先请求接受4个字节,当4个字节全收到时,可得出数据包类型和数据的总长度, 然后请求接受4+n字节,当4+n字节全收到时,就可以把这8+n个字节的时间拼成一个完整的数据包。
2)通信协议(数据包分析)
接受到一个完整的数据包后,就对其进行分析,取出,数据包的类型,然后根据不同的类型进行处理,主要包类型结构如下:

包类型 包内容
登陆 用户名长度 + 用户名
用户列表 用户数量 + 用户名若干
发送消息 消息长度 + 消息内容
私聊 目标用户名 + 消息
登录结果 标志(T/F)+ 原因
 心跳包
为了判断用户是否断开连接,可以设定一心跳包,即服务器每隔一段时间向客户端发一次,若连续多次未收到回应,则断定此客户端中断了连接。
四、程序代码
1)开发环境
操作系统:Windows 7
IDE:Visual Studio 2008
语言:C++
框架:MFC
2)基本流程图

上一页  [1] [2] [3] [4] [5] [6] 下一页

C++聊天室系统源代码 第3页下载如图片无法显示或论文不完整,请联系qq752018766
设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©751com.cn 辣文论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。