2011-03-08 99 views
0

我正在使用SDL和Net2库作为客户端 - 服务器应用程序。我面临的问题是,我没有收到来自我的客户端的所有TCP数据包,除非在发送每个数据包之前放置一个延迟从客户端。删除延迟我只得到一个数据包。SDL Net2缺少TCP数据包

回答

3

TCP连接是一个字节流。您的客户端可以发送20个每个5个字节的数据包,服务器将其读取为100个字节的序列。你需要自己分开数据。

+0

如你所说,它似乎我在一次接受我的所有数据我做到了。 – 2011-03-08 16:19:33

+0

但我不希望发生这种情况,我可以禁用它吗? – 2011-03-08 16:23:44

+2

这是TCP的工作原理。它不知道逻辑分组,它只是一系列传输的字节。 – Erik 2011-03-08 16:26:44

0

那么你不能保证(在普通插座)在同一时间接收所有数据包,您可能需要调用你的接收功能不止一次,接收所有数据。这当然取决于你对“数据包”的定义,你是否收到你的所有数据?

+1埃里克

+0

是的,我收到我的所有数据。关于如何申报我的数据包的任何建议?我已经意识到我的数据包非常小,并且TCP在发送它们之前将它们捆绑在一起,而不是每次发送一个数据包。我在开始时使用“密钥”发送数据包,以便服务器知道如何处理每个数据包,但现在我发现这种情况正在发生,我不知道该怎么办。 – 2011-03-08 16:39:43

+0

与您的'钥匙'一起,您可以简单地运行收到的数据并检查您的钥匙,或者在每个数据包的开头,您可以发送此消息的准确字节数。很多选项=) – ultifinitus 2011-03-08 18:08:48

0

虽然不能保证是可靠的,您很可能希望使用UDP,TCP没有。 Net2很好地处理UDP。 UDP实际上非常可靠。 UDP是面向消息的。 UDP消息往往会很快得到发送,并得到路由器的特殊待遇(并不总是一件好事:-)。 UDP通常用于游戏。

顺便说一句,如果你问的SDL邮件列表在这个问题上,或直接发送给我,你会在几个月前得到了这个建议。

我写了Net2,然后挂在SDL列表中。我不会在这里闲逛,因为这个地方是无限的时间。

鲍勃·彭德尔顿