Python 第 2 层以太网帧 --> 接收数据

Python layer 2 Ethernet frames --> Receiving data

我正在创建一些第 2 层帧,用于使用 Python 进行自动化总线模拟 3. 实际上,数据将毫无问题地发送。通信伙伴returns 将数据返回到我的python 脚本。我以 root 身份启动脚本并完成接收。重新启动脚本后,我无法再次接收数据。又得重新开始了。。。正在找原因。

实际情况:

Python:

s = socket.socket(socket.AF_PACKET, socket.SOCK_RAW, socket.htons(3))
s.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1024)
s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
s.bind(('enx0050b611bbf0', 3))
s.send(packet)
response = s.recv(1024)
print('Recv: %s' % bytes_to_hex_str(response))
print('Recv length: %i' % len(response))
s.close()

数据包: 它是一个字节数组:

0xff 0xff 0xff 0xff 0xff 0xff 0xde 0xad 0xbe 0xef 0x12 0x34 0x88 0xcd 0x20 0x00 0xa9 0xd7 0xdb 0x8f 0x01 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00

问题: 它只工作一次。第二次启动脚本后,s.recv() 阻止了脚本。我必须手动停止它并重新启动它。然后它工作了一次……

有人能给我解释一下这个问题吗?

我把所有东西都放在多线程环境中。一个用于发送,一个用于接收。现在它正在工作。 原因是以太网帧的循环发送有问题。 感谢您的帮助...