1

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

实际情况:

  • 带有 Ubuntu 18 的 VirtualBox --> 4.18.0-17-generic
  • USB 2 网络接口直接连接到虚拟机(适配器为:enx0050b611bbf0)。

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()阻止脚本。我必须手动停止它并重新启动它。然后它工作一次......</p>

有人能解释我的问题吗?

4

1 回答 1

0

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

于 2019-04-24T08:25:29.333 回答