Python сокеты - прекратить удаление возврата каретки из дейтаграммы UDP - PullRequest
0 голосов
/ 20 декабря 2011

У меня есть скрипт Python, который читает файл ASCII (в основном строки NMEA), а затем транслирует их по UDP, используя базовую библиотеку сокетов.

Каждую секунду «параграф» строк NMEA отправляется с заголовком. Сервер ожидает, что каждый абзац начинается с пустой строки (в частности, a \ r \ n, то есть 0d 0a). Я строю свою строку соответствующим образом ('\ r \ n' + параграф). Если посмотреть на строковое значение в отладчике и преобразовать строку в шестнадцатеричное, то перед ней правильно добавляется 0d0a.

Однако, когда я проверяю шестнадцатеричный дамп в Wireshark, кажется, что 0d удаляется, предположительно библиотекой сокетов, поэтому конечная датаграмма просто имеет 0a. Что должно быть хорошо, конечно, за исключением того, что сервер жестко запрограммирован на ожидание 0d0a.

Итак, есть ли способ заставить библиотеку сокетов сохранить шестнадцатеричный символ 0d? То же самое происходит, когда я запускаю клиент под Windows и Linux.

1 Ответ

2 голосов
/ 20 декабря 2011

Вам нужно , чтобы отредактировать исходное сообщение с фактическим кодом , чтобы мы могли понять, что может быть не так.

Это короткая демонстрацияPython 2.6, в котором нет волшебного поиска новой строки:

Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import socket
>>> s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
>>> s.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
>>> s.sendto('\r\nSOME TEXT HERE', ('127.0.0.1',9999))

и в другом терминале:

$ nc -ul 9999 | od -c
0000000   \r  \n   S   O   M   E       T   E   X   T       H   E   R   E
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...