作者cole945 (躂躂..)
看板C_Sharp
标题Re: [问题] 请教一个 TcpListener 问题
时间Thu May 31 13:02:29 2007
※ 引述《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
1F:推 kekul:了解~~ 谢谢你的解说 ^^ 05/31 14:21