[英]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 端口,您可以执行以下操作:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.