UDP打孔问题



所以我写了一个简单的python服务器来设置P2P连接(用于我正在制作的游戏(。

服务器代码很简单(python(:

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_address = ''
server_port = 5000
server = (server_address, server_port)
sock.bind(server)
print("Listening on " + server_address + ":" + str(server_port))
while True:
payload, client_address = sock.recvfrom(1)  
resp = client_address[0] + ":" + str(client_address[1])
print("Echoing data back to " + str(client_address))
sent = sock.sendto(str.encode(resp), client_address)

它侦听传入的UDP消息,并使用客户端的公共ip:port信息(例如">xxx.yyy.zzz.aaa:port(进行响应。

客户端从服务器接收此信息,并在Firebase上更新其ip:port信息。火球游戏大厅中的所有玩家都可以看到他们的对手ip:port信息。

然而,下一部分——P2P——不起作用。一旦客户端获得对手的公共ip:port信息并开始发送UDP数据包,它们就不会到达。

有人知道问题出在哪里吗?

*****编辑*****我已经解决了这个问题。。根据我提供的上述信息,任何人都不可能回答。在收到服务器的第一个响应后,我愚蠢地没有更新端口以接收新的udp数据包。感觉很笨。无论如何,UDP打孔系统似乎在工作。我的服务器是上面的python代码,客户端是一个带有firebase后端的统一游戏(c#(。如果有人有问题,请告诉我。

侦听端口必须在路由器上打开。您需要执行添加UPNP注册的额外步骤。

这是一个没有设置的库,所以没有pip安装https://github.com/jfdelgad/port-forward

这是一个可以pip安装的库https://github.com/flyte/upnpclient

两者在README.md 中都有很好的使用示例

最新更新