Re: [問題] 請教一個 TcpListener 問題

看板C_Sharp (C#)作者 (躂躂..)時間18年前 (2007/05/31 13:02), 編輯推噓1(100)
留言1則, 1人參與, 最新討論串4/4 (看更多)
※ 引述《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
文章代碼(AID): #16NbRcX2 (C_Sharp)
文章代碼(AID): #16NbRcX2 (C_Sharp)