Re: [問題] 請教一個 TcpListener 問題
※ 引述《kekul (每天都肚子餓)》之銘言:
: Server 收到:
: aaabbb
: ccc
因為 TCP 是 data streaming,
每一次 send 出去的資料並不是獨立的 packet 不會有boundary
所以出現在這樣的結果其實是正常的~
尤其開了 NoDelay, 資料又更有可能會被合併~
(也就是說, 因為在read之前兩筆資料都已經到了, 所以被一起收上來)
如果你希望資料是分開的話, 我想有兩種方法可以解決
第一是使用 UDP, 那麼每次send出去的資料就會是獨立的datagram
不過如果資料過大, 比如說大於ethernet的payload-1500Byte或MTU等等
那就有可能會被分割成更小的datagram~
(不過UDP有不reliable的問題, 你需要自己實作ack的機制)
另一種就是用 TCP, 而每次send前, 你要明確告知對方這次send的大小
(像header之類的東西)
ex:
== send side == == receive side ==
length=10
data="1234567890" ---> length = read( sizeof(length) )
data = read(length)
依情況也許可以再實作 preamble 的機制,
在接收流程錯亂時, 還可以利用這個機制來找到你的header
大略是這樣~
--
然後我不是前輩啊 orz
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.139.142.169
推
05/31 14:21, , 1F
05/31 14:21, 1F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):
C_Sharp 近期熱門文章
PTT數位生活區 即時熱門文章