我正在尝试通过UDP套接字将消息从Raspberry Pi(Ubuntu 20)发送到笔记本电脑(Virtualbox Ubuntu 20)。因此,我正在使用https://wiki.python.org/moin/UdpCommunication
中的简单代码发送(从Raspberry Pi)
RStudion Server
从笔记本电脑接收
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)
。
我在RPI端尝试了笔记本电脑的IP地址。
我在两端都尝试了两台机器的IP地址。
我尝试UDP_IP = "0.0.0.0"
绑定所有。
我尝试在防火墙设置中添加UDP端口号。
我检查了这个论坛中与此相关的多个问题。
不过,我在笔记本电脑的接收端无法收到任何数据包。我不知道怎么了。 请告知。
答案 0 :(得分:2)
问题可能出在IP地址上,因为您正在使用IP'127.0.0.1'(本地主机)访问外部设备。请找出您设备的IP,尝试使用ifconfig Linux命令。另外,请检查是否有任何东西阻止您的连接。
请注意,对于socket.bind(地址),您可以使用“ 0.0.0.0”;对于socket.sendto(字节,地址),您应该使用要发送到的设备的IP。
我建议您下载一个名为Hercules的程序,使用该程序,您可以创建UDP对等体,以找出无法正常工作的情况。例如,您可以在一侧使用python,在另一侧使用Hercules来排除代码执行一侧的错误,还可以尝试两个Hercules连接,看看是否可以建立通信,在这种情况下,问题很可能与另一方面,如果您无法在两个Hercules UDP对等体之间建立连接,则代码执行很可能是设备或网络本身的问题。
答案 1 :(得分:0)
如果您在 RPi 上使用静态 IP,则需要添加静态路由:
sudo ip route add 236.0.0.0/8 dev eth0
答案 2 :(得分:0)
确保您使用的端口在 Windows 10 中启用了 UDP。
要打开任何 UDP 端口,您可以执行以下操作: