【转】TCP协议的无消息边界问题
生活随笔
收集整理的這篇文章主要介紹了
【转】TCP协议的无消息边界问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://www.cnblogs.com/eping/archive/2009/12/12/1622579.html?
使用TCP協議編寫應用程序時,需要考慮一個問題:TCP協議是無消息邊界的,即不能保證來自單個Send方法的數據能被單個Receive方法讀取。
eg:
第一次發送:abcdefg?? 第二次發送:123456???????? 接收方接收數據時,可能會出現以下情況:
第一次接收:abcdefg123456?? 也可能出現:第一次接收:abc 第二次接收:efg12 第三次接收:3456
因此要解決TCP發送消息與接收消息一致性,編程時必須要解決消息邊界問題。
解決辦法:1、發送固定長度的消息。這種方適用于信息長度固定的場合。
2、將消息長度與消息一起發送。這種方法增加了數據傳送信息量,也增加了編程工作量。
eg:每次發送的字符串信息前面用2個字節表明本次信息的長度,接收方先從這兩個字節得到信息長度。然后根據長度值循環接收發送方發送的字符串
3、使用特殊標記分隔消息。這種方法適合信息本身不包含特殊標記的場合。如每發送一行信息,就可以用回車換行作為分隔符。
總結
以上是生活随笔為你收集整理的【转】TCP协议的无消息边界问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 更改Docker默认的images存储位
- 下一篇: 单元测试代码:SpringTest+JU