UDP打孔问题

时间:2018-11-08 01:43:38

标签: c# python udp hole-punching

因此,我编写了一个简单的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 信息。 Firebase游戏大厅中的所有玩家都可以看到他们的对手 ip:port 信息。

但是,下一部分-P2P-不起作用。 一旦客户端使对手公开 ip:port 信息并开始发送UDP数据包,它们都不会到达。

有人知道这个问题可能是什么吗?

*****编辑***** 我已经解决了问题。.根据我给的上述信息,任何人都不可能回答。从服务器获得第一个响应后,我愚蠢地不更新端口以接收新的udp数据包。感觉很愚蠢的atm。 无论如何,UDP打孔系统似乎正在运行。 我的服务器是上面的python代码,客户端是一个带有Firebase后端的统一游戏(c#)。如果有人有疑问,请让我知道。

1 个答案:

答案 0 :(得分:1)

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

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

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

的库

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