[英]Correct architectual way to send “datagrams” via TCP
我需要通過TCP以我的自定義格式傳輸全字節數據包。 但是,如果我正確理解TCP是流協議,那么當我在發送方調用send
方法時,沒有保證在調用recv
時將在接收方以相同大小接收它(可以與Nagle的算法合並在一起,然后在不適合幀或不適合緩沖區時拆分)。
UDP提供完整的數據報,因此不會出現此類問題。
因此,問題是:什么是最好的和正確的方法來recv
與send
相同包裝,尺寸相同且沒有膠水的包裝。 我使用python開發。
我想我可以使用HDLC
東西,但是我不確定遍歷每個字節是否是最佳選擇。 也許有一些開源的小例子可以解決這種情況,或者在書中有描述?
由於TCP只是一個八位位組流,因此如果沒有膠水,就不可能在數據周圍(即成幀)或在數據內部(末端清晰的結構)都沒有粘合。
通常,可以通過使用分隔符(例如HTTP標頭和正文之間的\\r\\n\\r\\n
)來完成此操作,也可以僅使用大小作為前綴。 在后一種情況下,只需讀取大小(固定字節數),然后讀取此字節數即可獲得實際消息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.