UDP套接字未使用python接收任何消息

时间:2020-07-30 22:55:56

标签: python sockets udp

我正在尝试通过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端口号。 我检查了这个论坛中与此相关的多个问题。

不过,我在笔记本电脑的接收端无法收到任何数据包。我不知道怎么了。 请告知。

3 个答案:

答案 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 端口,您可以执行以下操作:

  1. 转到控制面板> 系统和安全以及 Windows 防火墙。
  2. 高级设置 > 右键单击​​入站规则并选择新建规则。
  3. 添加要打开的端口,然后单击下一步。
  4. 在下一个窗口中选择 UDP 协议和端口号 然后点击下一步。
  5. 选择允许连接并点击下一步。
  6. 选择网络类型并点击下一步。
  7. 为规则命名并单击“完成”。
相关问题