C++ SDL Net2缺少TCP数据包

C++ SDL Net2缺少TCP数据包,c++,sdl,C++,Sdl,我将SDL和Net2 lib用于客户机-服务器应用程序。我面临的问题是,除非在从客户机发送每个数据包之前设置延迟,否则我不会从客户机接收所有TCP数据包。除去延迟,我只得到一个数据包。TCP连接是一个字节流。您的客户机可以发送20个数据包,每个数据包包含5个字节,服务器将其读取为一个100字节的序列。您需要自己分割数据。TCP连接是一个字节流。您的客户机可以发送20个数据包,每个数据包包含5个字节,服务器将其读取为一个100字节的序列。您需要自己将数据拆分。您不能保证(在常规套接字中)一次接收所

我将SDL和Net2 lib用于客户机-服务器应用程序。我面临的问题是,除非在从客户机发送每个数据包之前设置延迟,否则我不会从客户机接收所有TCP数据包。除去延迟,我只得到一个数据包。

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

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

您不能保证(在常规套接字中)一次接收所有数据包,您可能需要多次调用接收函数才能接收所有数据。这当然取决于您对“数据包”的定义,您是否正在接收所有数据


+1 erik

如果不能保证(在常规套接字中)一次接收所有数据包,则可能需要多次调用接收函数才能接收所有数据。这当然取决于您对“数据包”的定义,您是否正在接收所有数据


+1 erik

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

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

我写了Net2,我常在SDL名单上闲逛。我不在这里闲逛,因为这个地方是一个无限的时间水槽


Bob Pendleton

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

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

我写了Net2,我常在SDL名单上闲逛。我不在这里闲逛,因为这个地方是一个无限的时间水槽


鲍勃·彭德尔顿(Bob Pendleton)

我按照你说的做了,看起来我一次就收到了所有数据。但我不想发生这种情况。我可以禁用它吗?TCP就是这样工作的。它不知道逻辑数据包,它只是一系列传输的字节。我按照你说的做了,看起来我一次收到了所有的数据。但我不想发生这种情况。我可以禁用它吗?TCP就是这样工作的。它不知道逻辑数据包,它只是一系列传输的字节。是的,我正在接收我的所有数据。关于如何声明我的数据包,有什么建议吗?我逐渐意识到我的数据包非常小,TCP在发送它们之前将它们捆绑在一起,而不是一次只发送一个数据包。我在开始发送带有“密钥”的数据包,以便服务器知道如何处理每个数据包,但现在我看到这种情况,我不确定我应该做什么。使用“密钥”,您只需运行接收到的数据并检查密钥,或者在每个数据包的开头,您可以发送此消息的确切字节数。很多选项=)是的,我正在接收我所有的数据。关于如何声明我的数据包有什么建议吗?我逐渐意识到我的数据包非常小,TCP在发送它们之前将它们捆绑在一起,而不是一次只发送一个数据包。我在开始发送带有“密钥”的数据包,以便服务器知道如何处理每个数据包,但现在我看到这种情况,我不确定我应该做什么。使用“密钥”,您只需运行接收到的数据并检查密钥,或者在每个数据包的开头,您可以发送此消息的确切字节数。很多选项=)