gpt4 book ai didi

c# - UDP 打洞问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:09:19 25 4
gpt4 key购买 nike

所以我写了一个简单的 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 消息并使用客户端的公共(public) ip:port 信息进行响应(例如“xxx.yyy.zzz.aaa:port”)。 p>

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

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

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

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

最佳答案

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

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

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

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

关于c# - UDP 打洞问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53200404/

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