gpt4 book ai didi

ubuntu - 多人游戏的中继服务器 - UNet

转载 作者:行者123 更新时间:2023-12-04 18:46:22 26 4
gpt4 key购买 nike

我已经在这个问题上苦苦挣扎了好几个星期了,我找不到任何可以帮助我的东西。 Unity 的多人网络拓扑(我所知道的)是主机-客户端。主机开始游戏,客户端使用 ip:port 连接到主机。当其中一方位于 NAT 之后时,问题就开始了。不知道这个事实,我使用 php 开发了一个 Web 服务来注册主机的 ip 和端口,当客户端请求时,返回现有主机之一(ip、端口、游戏名称等)。你猜对了,那是彻底的失败,至少对 NAT 来说是这样。

所以现在我所知道的是,我唯一获胜的方法就是拥有一个中继服务器。但我不知道该怎么做。

这是我到目前为止所尝试的:

使用 Socat:socat UDP4-RECVFROM:50000,fork UDP4-SENDTO:HOST_IP_ADDR:HOST_PORT
其中50000是客户端在 networkManager.networkPort 中使用的端口, 和 networkManager.networkAddress显然是我服务器的IP地址。我得到了HOST_IP_ADDRHOST_PORT来自我提到的 php webservice。它没有用。

我尝试的下一件事是使用 this python script作为 UDP 代理服务器,使用 ./udp-relay.py 50000:HOST_IP:HOST_PORT在其中,我再次从 web 服务中获取了主机 ip 和端口。之后我设置Network.proxyPortNetwork.proxyIP相应地统一(我的服务器IP和端口50000);这也不起作用。

那么,我是否离我想要实现的目标很近?

多谢你们

编辑:

我想使用中继服务器,这样它就可以 100% 工作,而不是打洞,因为它不适用于所有路由器。

最佳答案

您正在寻找的东西称为 NAT 打洞或穿通。

https://en.wikipedia.org/wiki/UDP_hole_punching

这里有一些关于如何做到这一点的好信息:

http://www.brynosaurus.com/pub/net/p2pnat/

您需要一个不在 NAT 后面的介绍服务器。但它只需要建立通信,不需要中继数据包。仅当玩家落后于表现不佳的 NAT 时,您才需要进行中继。

关于ubuntu - 多人游戏的中继服务器 - UNet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37618956/

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