Кадры Ethernet Python layer 2 -> Получение данных - PullRequest
1 голос
/ 16 апреля 2019

Я создаю несколько кадров уровня 2 для симуляции шины автоматизации с помощью Python 3. На самом деле данные будут отправлены без проблем. Коммуникационный партнер возвращает данные обратно в мой скрипт на python. Я запускаю скрипт от имени пользователя root и получение завершено. После перезапуска скрипта я больше не могу получать данные. Я должен начать это снова ... Теперь я ищу причину.

Фактические условия:

  • VirtualBox с Ubuntu 18 -> 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() блокирует скрипт. Я должен остановить его вручную и перезапустить. Тогда это работает один раз ...

Может кто-нибудь объяснить мне проблему?

1 Ответ

0 голосов
/ 24 апреля 2019

Я помещаю все в многопоточную среду. Один для отправки и один для получения. Теперь это работает. Причиной была проблема с циклической отправкой кадров Ethernet. Спасибо за помощь ...

...