如何创建套接字以发送和接收 UDP 数据包

How to create socket to send and receive UDP packets

提问人:Jim Fell 提问时间:11/16/2023 最后编辑:dbushJim Fell 更新时间:11/17/2023 访问量:25

问:

如何创建可以发送和接收 UDP 数据包的套接字?

我的应用程序要求将套接字绑定到物理网络接口,因为它是一个组播系统,具有多个接口连接到目标设备上的冗余重复网络。我的脚本必须能够与每个网络进行清晰的通信,而无需与其他网络进行交互。这就是为什么需要绑定到接口的原因。

这是我到目前为止所拥有的,但它一直在超时。我做错了什么?

import socket

s = socket.socket(socket.AF_PACKET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.setblocking(True)
s.settimeout(3.0)
s.bind(('eth0', 0))

z_data, z_addr = s.recvfrom(1024)  # expected target frame total length is 264 bytes

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
socket.timeout: timed out
python 接字 udp python-3.6 组播

评论

1赞 Remy Lebeau 11/17/2023
您是否尝试过使用代替?AF_INET/6AF_PACKET
0赞 Jim Fell 11/17/2023
我从文档中了解到,AF_INET需要(host_ip,端口)进行绑定。似乎只有AF_PACKET允许与接口名称绑定。
0赞 Remy Lebeau 11/17/2023
套接字可以通过以下方式绑定到接口名称: stackoverflow.com/questions/7221577AF_INET/6SO_BINDTODEVICE

答: 暂无答案