【问题标题】:How to send data with Python over UDP from remote machine (client) to local machine (server)?如何通过 UDP 使用 Python 将数据从远程机器(客户端)发送到本地机器(服务器)?
【发布时间】:2020-12-21 01:39:23
【问题描述】:

我正在尝试通过 UDP 使用 Python 从云中的远程机器发送数据到我正在监听的本地机器。

从我的本地机器运行...(服务器)

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)

我相信 应该是我本地机器的主机名,但我不熟悉如何在我的本地机器上公开服务器运行的端口。

如何暴露我的本地机器,使运行在远程云机器上的客户端能够成功地将UDP数据包发送到本地机器上的服务器?

提前致谢。

【问题讨论】:

    标签: python sockets tcp udp tunneling


    【解决方案1】:

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

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

    -------- ----------> |域名解析 | ---------- | -------- | | \|/ ---------- ------------ -------------- |客户 | |互联网 | |x:x|服务器 | ---------- ------------ --------------

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

    -------- ----------> |域名解析 | ---------- | -------- | | \|/ ---------- ------------ -------------- -------------- |客户 | |互联网 | |x:x|路由器| |x:x|服务器 | ---------- ------------ -------------- --------------

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 0.0.0.0 是 IPv4 通配符地址,您无法向其发送流量。
      • 我假设必须使用类似 ngrok 的东西,但是 ngrok 不支持 UDP 。没有成功的替代品。
      猜你喜欢
      • 2013-02-15
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      相关资源
      最近更新 更多