【轉】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

相關文章
相關標籤/搜索