为了账号安全,请及时绑定邮箱和手机立即绑定

如何使用Python通过UDP从远程机器(客户端)向本地机器(服务器)发送数据?

如何使用Python通过UDP从远程机器(客户端)向本地机器(服务器)发送数据?

哔哔one 2023-07-11 16:24:45
我正在尝试使用 Python 通过 UDP 将数据从云中的远程计算机发送到本地侦听计算机。从我的本地计算机运行...(服务器)from socket import *serverSocket = socket(AF_INET, SOCK_DGRAM)serverSocket.bind(('0.0.0.0', 3000))while True:    message, address = serverSocket.recvfrom(1024)    print(message, address)从云中的远程计算机运行...(客户端)from socket import *clientSocket = socket(AF_INET, SOCK_DGRAM)server_addr = (<WHAT GOES HERE?>, 3000)clientSocket.sendto(b'hello world', server_addr)我相信 <WHAT GOES HERE?> 应该是我的本地计算机的主机名,但我不熟悉如何公开运行服务器的本地计算机上的端口。如何暴露本地机器,使得远程云机器上运行的客户端能够成功将UDP数据包发送到本地机器上的服务器?提前致谢。
查看完整描述

2 回答

?
青春有我

TA贡献1784条经验 获得超8个赞

由于远程客户端位于“云中”(即在 Internet 上其他位置的另一台计算机上运行),因此它将需要使用 ISP 分配给您的公共 IP。在服务器端,您可以使用https://api.ipify.org等网站来发现您的公共 IP,然后将其提供给客户端进行连接。或者,您可以向任何公共域注册商(GoDaddy 等)注册静态主机名,并将其指向您的公共 IP(如果您的 IP 是动态的,则可以使用动态 DNS 服务来处理该情况)。


如果您的服务器计算机直接连接到互联网调制解调器,那么您的公共主机名/IP 将直接路由到您的服务器计算机。


                 -------

     ----------> | DNS | ----------

     |           -------          |

     |                           \|/

----------     ------------     --------------

| client | <-> | Internet | <-> |x:x| server |

----------     ------------     --------------

但是,如果您的服务器没有直接连接到调制解调器,而是在 NAT 路由器后面运行,那么您的公共主机名/IP 将路由到路由器,而不是您的服务器计算机:


                 -------

     ----------> | DNS | ----------

     |           -------          |

     |                           \|/

----------     ------------     --------------     --------------

| client | <-> | Internet | <-> |x:x| router | <-> |x:x| server |

----------     ------------     --------------     --------------

因此,路由器必须单独配置端口转发规则,以将入站流量从其公共 WAN IP/端口路由到服务器计算机的专用 LAN IP/端口。


如果路由器支持 uPNP 并且已启用,您的服务器可以在绑定/关闭其侦听套接字时在代码中动态配置这些规则。否则,您将必须使用路由器的管理界面手动配置规则。


查看完整回答
反对 回复 2023-07-11
?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

如果我理解正确的话,您的 IP 地址应该就是您所需要的。快速的谷歌搜索应该足以查找它。假设“0.0.0.0”是您的 IP 地址,您可以使用它



查看完整回答
反对 回复 2023-07-11
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信