Python UDP套接字:广播可以工作,但是单播没有

时间:2017-11-20 14:50:39

标签: python sockets udp

设置

我正在尝试使用以太网上的UDP数据包将控制命令发送到传感器。

传感器具有硬编码的源IP和端口号,它只会回复,因此我必须在发送之前绑定端口。由于我的机器上有几个接口,我还必须绑定IP地址。示例代码如下所示。

import socket

DST_IP = "..."
SRC_IP = "..."
PORT_NO = .

message = "..."

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

sock.bind((SRC_IP, PORT_NO))
sock.connect((DST_IP, PORT_NO))

sock.sendto(bytes(message, "utf-8"), (DST_IP, PORT_NO))
sock.sendto(bytes(message, "utf-8"), ("255.255.255.255", PORT_NO))

print("src ", sock.getsockname()) # verify binding successful
print("dst ", sock.getpeername()) # verify connecting successful

sock.close()

我正在使用Wireshark监控数据包并检查发送的数据以验证命令是否成功。

问题

  • 绑定和连接后,我无法在Wireshark上检测到单播,只能检测广播。
  • 如果我不绑定,程序将选择不同的界面,发送将成功
  • 我试图禁用除我需要的网络接口之外的所有网络接口,并尝试在不绑定IP或端口的情况下运行程序,并且没有在单播中发送任何内容但仅在广播中发送

我没有调试的想法。建议?

0 个答案:

没有答案