使用TCP和UDP进行java游戏

时间:2015-08-18 22:35:47

标签: java sockets networking tcp udp

我正在为朋友们制作一个实时的java游戏,以便在局域网上玩。游戏正在使用客户端 - 服务器架构,它现在正在使用UDP(用于位置更新和加入游戏)。当我通过互联网与我的朋友测试游戏时,丢失了一些重要的UDP数据包(比如用于产生敌人的数据包)。

所以我的问题是,制作实时多人游戏的最佳解决方案是什么?我可以使用UDP作为necesarry更新数据包,TCP可以用于登录,断开连接,聊天等数据包吗?我可以在同一个端口和套接字上使用这两种协议吗?

3 个答案:

答案 0 :(得分:0)

您最好的选择就是使用TCP。除了为您提供重新发送功能之外,您不必自己编写这些功能,而且还有其他良好功能的主机,TCP还可以使处理路由器和防火墙变得更加容易。

我建议关闭Nagle算法,以便始终立即发送数据。

答案 1 :(得分:0)

你可以将两者结合起来。有时候你可能需要可靠的数据,那时你需要TCp。有时它不需要,以便你可以使用UDP.Combine这两者。

答案 2 :(得分:0)

只想帮助任何路人,便会迷失其他答案中给出的令人难以置信的糟糕建议。抱歉,我确定这是很好的意思。如果您有任何实时方面的知识,请不要在游戏中使用TCP。您会在以后的某个时刻后悔。

您想要的是通过UDP实现可靠性/连接。 Gaffer on Games在这个主题上有出色的系列。我诚挚地建议对这个主题感兴趣的每个人阅读整个系列。这是描述UDP上“连接”的文章的链接:https://gafferongames.com/post/virtual_connection_over_udp/

您很幸运-他们甚至在开放源代码库<3 https://github.com/networkprotocol/yojimbo

中实现了所有这些功能