0
我已閱讀,在使用Erlang的發送調用gen_tcp通過套接字中的數據可以在單個流被聚集。我如何強制套接字發送完全特定數量的字節?發送的字節確切數目通過套接字
我已閱讀,在使用Erlang的發送調用gen_tcp通過套接字中的數據可以在單個流被聚集。我如何強制套接字發送完全特定數量的字節?發送的字節確切數目通過套接字
TCP是一個流協議(UDP不像其面向分組的),其例如也就是說,如果現有的數據來自於客戶端上的一個或幾個send()
調用接收應用程序不能告訴。
你真的沒有過的字節數的任何控制在一個TCP數據包被髮送,多send()
調用可能導致一個TCP數據包被接收,一個send()
通話可能會導致一些TCP數據包被髮送。這由OS TCP堆棧控制。
在Erlang中你可以使用套接字選項{packet, 1|2|4}
到gen_tcp:connect
和gen_tcp:listen
創建TCP數據的面向數據包的處理。這將插入1,2或4字節的前綴給每個send()
和接收側(假設它也Erlang和使用相同的{packet, N}
選項),直到已經接收到的字節數發送的將讀出的數據,而不管該消息是如何零散轉換成TCP數據包。
到gen_tcp:recv
的調用將阻塞,直到所期望的字節數已經被讀取。對於主動模式套接字,消息以預期的字節數發送。
目前尚不清楚你想解決什麼問題。發送的字節數將始終是您指定的數字。它永遠不會發送你要求它發送或發送你沒有要求發送的字節的字節。 –
我的錯誤或實際或不同的發送操作可以彙總在一個單一的塊? {no_delay,false}應該是標準行爲 – user601836
「單個塊」是什麼意思?如果您指的是您在單個TCP讀取操作中獲得的數據量,則它是任意的。這是TCP的基本屬性,對此您無能爲力。 –