Java NAT是否阻止来自使用TCP连接的服务器的UDP数据包?

Java NAT是否阻止来自使用TCP连接的服务器的UDP数据包?,java,networking,udp,multiplayer,game-maker-studio-1.4,Java,Networking,Udp,Multiplayer,Game Maker Studio 1.4,我正在尝试使用java服务器和game maker studio客户端开发一个游戏。我已经编写了一些基本的连接代码,它在我的本地网络中运行良好。但当我托管服务器并尝试连接时,我的客户机会获得服务器分配的ID,该ID通过TCP发送,但它不会接收UDP协议发送的任何命令。服务器如何无法通过UDP建立连接,而可以通过TCP建立连接。我听说我需要打孔。但一旦我用game makers studio网络功能编写了服务器,UDP就能够与服务器上的相同配置建立连接。所以他们在内置功能中使用打孔?如果我需要实施

我正在尝试使用java服务器和game maker studio客户端开发一个游戏。我已经编写了一些基本的连接代码,它在我的本地网络中运行良好。但当我托管服务器并尝试连接时,我的客户机会获得服务器分配的ID,该ID通过TCP发送,但它不会接收UDP协议发送的任何命令。服务器如何无法通过UDP建立连接,而可以通过TCP建立连接。我听说我需要打孔。但一旦我用game makers studio网络功能编写了服务器,UDP就能够与服务器上的相同配置建立连接。所以他们在内置功能中使用打孔?如果我需要实施打孔,那么我应该只使用TCP还是应该学习打孔,不管付出什么代价?

这里有很多问题,所以我将试着一件一件地将它们分开。首先

NAT是否阻止来自使用TCP连接的服务器的UDP数据包

。仅仅因为NAT在两台机器之间建立了TCP连接,并不意味着它也会自动转发UDP数据包

服务器如何不能通过UDP建立连接,而可以通过TCP建立连接

TCP是一种面向连接的协议,而UDP是一种无连接的协议,因此技术上不存在“UDP连接”。当两台计算机通过UDP进行通信时,它们只是来回交换UDP数据包,“连接”是隐含的(或在更高级别上进行管理),而不是由UDP协议本身指定的

我听说我需要打孔。。。如果我需要实现打孔,那么我应该只使用TCP还是应该学习打孔,不惜任何代价


UDP打孔是一种可能性,但它很复杂,不能100%保证所有NAT都兼容。相反,您可以只使用TCP构建游戏,然后在它工作并部署后,尝试使用更高级的通信通道,如UDP打孔或WebRTC数据通道。

您太棒了,非常感谢!还有几个问题,因为我认为您在这方面很有经验:)我可以欺骗UDP使其像面向连接的协议一样工作吗?其他什么在线fps游戏在他们的网络中使用,因为我很确定他们使用UDP,因为fps游戏需要速度,他们也使用打孔?当然,谢谢。实际上,UDP打孔过程“告诉”兼容NAT您要建立“UDP连接”。如果打孔成功,NAT将在内部记住来回转发UDP数据包。但并非所有NAT都支持打孔。有关UDP打孔工作原理的说明,请参阅。你是正确的,许多游戏使用UDP,但它将介绍。祝你好运