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

我正在尝试使用 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数据包发送到本地机器上的服务器?


提前致谢。


哔哔one
浏览 134回答 2
2回答

青春有我

由于远程客户端位于“云中”(即在 Internet 上其他位置的另一台计算机上运行),因此它将需要使用 ISP 分配给您的公共 IP。在服务器端,您可以使用https://api.ipify.org等网站来发现您的公共 IP,然后将其提供给客户端进行连接。或者,您可以向任何公共域注册商(GoDaddy 等)注册静态主机名,并将其指向您的公共 IP(如果您的 IP 是动态的,则可以使用动态 DNS 服务来处理该情况)。如果您的服务器计算机直接连接到互联网调制解调器,那么您的公共主机名/IP 将直接路由到您的服务器计算机。&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-------&nbsp; &nbsp; &nbsp;----------> | DNS | ----------&nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-------&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\|/----------&nbsp; &nbsp; &nbsp;------------&nbsp; &nbsp; &nbsp;--------------| client | <-> | Internet | <-> |x:x| server |----------&nbsp; &nbsp; &nbsp;------------&nbsp; &nbsp; &nbsp;--------------但是,如果您的服务器没有直接连接到调制解调器,而是在 NAT 路由器后面运行,那么您的公共主机名/IP 将路由到路由器,而不是您的服务器计算机:&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-------&nbsp; &nbsp; &nbsp;----------> | DNS | ----------&nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;-------&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; |&nbsp; &nbsp; &nbsp;|&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;\|/----------&nbsp; &nbsp; &nbsp;------------&nbsp; &nbsp; &nbsp;--------------&nbsp; &nbsp; &nbsp;--------------| client | <-> | Internet | <-> |x:x| router | <-> |x:x| server |----------&nbsp; &nbsp; &nbsp;------------&nbsp; &nbsp; &nbsp;--------------&nbsp; &nbsp; &nbsp;--------------因此,路由器必须单独配置端口转发规则,以将入站流量从其公共 WAN IP/端口路由到服务器计算机的专用 LAN IP/端口。如果路由器支持 uPNP 并且已启用,您的服务器可以在绑定/关闭其侦听套接字时在代码中动态配置这些规则。否则,您将必须使用路由器的管理界面手动配置规则。

犯罪嫌疑人X

如果我理解正确的话,您的 IP 地址应该就是您所需要的。快速的谷歌搜索应该足以查找它。假设“0.0.0.0”是您的 IP 地址,您可以使用它
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python