【转】TCP协议的无消息边界问题

http://www.cnblogs.com/eping/archive/2009/12/12/1622579.html 

 

使用TCP协议编写应用程序时,须要考虑一个问题:TCP协议是无消息边界的,即不能保证来自单个Send方法的数据能被单个Receive方法读取。html

eg:编程

第一次发送:abcdefg   第二次发送:123456         接收方接收数据时,可能会出现如下状况:post

第一次接收:abcdefg123456   也可能出现:第一次接收:abc 第二次接收:efg12 第三次接收:3456spa

所以要解决TCP发送消息与接收消息一致性,编程时必需要解决消息边界问题。htm

解决办法:一、发送固定长度的消息。这种方适用于信息长度固定的场合。blog

二、将消息长度与消息一块儿发送。这种方法增长了数据传送信息量,也增长了编程工做量。字符串

eg:每次发送的字符串信息前面用2个字节代表本次信息的长度,接收方先从这两个字节获得信息长度。而后根据长度值循环接收发送方发送的字符串it

三、使用特殊标记分隔消息。这种方法适合信息自己不包含特殊标记的场合。如每发送一行信息,就能够用回车换行做为分隔符。class

相关文章
相关标签/搜索