gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:30:22 24 4
gpt4 key购买 nike

我正在尝试使用 java 服务器和游戏制作工作室客户端开发游戏。我已经编写了一些基本的连接代码,它在我的本地网络中运行良好。但是,当我托管服务器并尝试连接我的客户端时,客户端会获取通过 TCP 发送的服务器分配的 ID,但它不会收到任何通过 UDP 协议(protocol)发送的命令。服务器如何无法通过 UDP 建立连接,而可以通过 TCP 建立连接。我听说我需要 UDP 打洞。但是,一旦我编写了具有游戏制作工作室网络功能的服务器,并且 UDP 就能够在服务器上使用相同的配置建立连接。那么他们在内置函数中使用打洞?如果我需要实现打洞,我应该只使用 TCP 还是应该不惜一切代价学习打洞?

最佳答案

这里有很多问题,所以我会尝试将它们逐个分解。首先...

Does NAT block UDP packets coming from a server connected using TCP?

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

How server can't establish connection over UDP while it can over TCP?

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

I heard I need UDP hole punching... If I need to implement hole punching instead should I use TCP only or I should learn hole punching for any cost ?

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

关于java - NAT 是否会阻止来自使用 TCP 连接的服务器的 UDP 数据包?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47212579/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com