繁体   English   中英

UDP 套接字没有收到任何带有 python 的消息

[英]UDP Socket is not receiving any message with python

我正在尝试通过 UDP 套接字将消息从 Raspberry Pi(Ubuntu 20)发送到笔记本电脑(Virtualbox Ubuntu 20)。 所以我使用来自https://wiki.python.org/moin/UdpCommunication的简单代码

发送(来自树莓派)

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005
MESSAGE = b"Hello, World!"

print("UDP target IP: %s" % UDP_IP)
print("UDP target port: %s" % UDP_PORT)
print("message: %s" % MESSAGE)

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.sendto(MESSAGE, (UDP_IP, UDP_PORT))

接收(从笔记本电脑)

import socket

UDP_IP = "127.0.0.1"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
    print("received message: %s" % data)

我在两端都尝试UDP_IP = "0.0.0.0" 我在 RPI 端尝试了笔记本电脑的 Ip 地址。 我在两端都尝试了两台机器的 IP 地址。 我试过sock.bind(("", UDP_PORT))绑定所有。 我尝试在防火墙设置中添加 UDP 端口号。 我检查了这个论坛上与此相关的多个问题。

尽管如此,我还是无法在笔记本电脑接收端收到任何数据包。 我不知道出了什么问题。 请指教。

问题可能出在 IP 地址中,因为您使用 IP '127.0.0.1' (localhost) 来访问外部设备。 请找出您设备的 IP,尝试使用 ifconfig Linux 命令。 另外,请检查是否没有任何东西阻止您的连接。

考虑到对于 socket.bind(address) 你可以使用 '0.0.0.0' 而对于 socket.sendto(bytes, address) 你应该使用你想要发送到的设备的 IP。

我建议你下载一个名为 Hercules 的程序,使用这个程序你可以创建一个 UDP 对等体来找出什么是不正常的。 例如,您可以在一侧使用 python 并在另一侧使用 Hercules 以排除代码执行一侧的错误,您也可以尝试两个 Hercules 连接,看看是否可以建立通信,在这种情况下问题很可能与问题有关对于代码执行,另一方面,如果您无法在两个 Hercules UDP 对等点之间建立连接,则问题很可能与设备或网络本身有关。

如果您在 RPi 上使用 static IP,则需要添加 static 路由:

sudo ip route add 236.0.0.0/8 dev eth0

确保您使用的端口在 windows 10 中启用了 UDP。

要打开任何 UDP 端口,您可以执行以下操作:

  1. Go 到控制面板> 系统和安全和 Windows 防火墙。
  2. 高级设置 > 右键单击入站规则和 select 新规则。
  3. 添加要打开的端口,然后单击下一步。
  4. Select UDP 协议和端口号进入下一个 window 并单击下一步。
  5. Select 允许连接并点击下一步。
  6. Select 网络类型并单击下一步。
  7. 为规则命名,然后单击完成。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM