Russian Qt Forum
Апреля 28, 2025, 19:03 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с заголовком и телом IP-пакета  (Прочитано 3602 раз)
ManOfOrange
Гость
« : Октября 21, 2013, 13:33 »

Приветствую всех! :-)

Есть аппаратура, принимающая довольно специфичные команды. Команда выглядит примерно так: Ф_1011001123/120113430009=ТекстСообщения
Каждый символ в команде что-то значит для устройства (и да, поддерживаются русские буквы). Потом всё это переводится toHex, считается контрольная сумма и подаётся через com-порт в устройство. Этот процесс налажен и работает :-)

Но неожиданно передо мною возник вопрос работы с IP-пакетами по кускам: как выяснилось, аппаратура в определённом режиме может конвертировать IP-пакеты в вышеизложенный формат. Выглядит примерно так: Ф_1011001123/120113430009103991...n...=Данные IP-пакета
Жирным выделен добавленный кусок, первые цифры имеют смысл для устройства.
...n... — IP-заголовок.

Соответственно, встал вопрос, как получить из IP-пакета отдельно заголовок и отдельно данные, чтобы потом запихать их внутрь команды; да и как вообще получить для работы IP-пакет. Пока что я работал только с QTcpSocket и QTcpServer для передачи мелких файлов по локалке.

Во время поиска наткнулся на raw-socket'ы. Имеет ли смысл копать в этом направлении и разбираться с ними?

Заранее спасибо :-)

Qt 4.7.2, ОС «Заря» (переделанный Red Hat).
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #1 : Октября 21, 2013, 14:24 »

Гы, хитрые штучки придумывают наши ОКБ. Теперь я за отчизну спокоен. Улыбающийся

1. Попробуй setSockOptions() для перевода девайса в нужный режим.
2. Если не получается, то в чем проблема парсить входной поток самостоятельно отсекая заголовки (или что там надо отсечь)?
« Последнее редактирование: Октября 21, 2013, 14:26 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
stima
Гость
« Ответ #2 : Октября 22, 2013, 18:48 »

Не совсем понятно откуда Вы получаете данный буфер.

1. Если он приходит Вам на TCP сокет то там уже должно быть все распарсчено, Вам нужно взять только payload.
2. Если он приходит из другого места (массивом байт), и вы знаете что это TCP пакет можете распарсить его вручную. Для этого воспользуйтесь описанием TCP пакета, например с той-же вики.
http://ru.wikipedia.org/wiki/TCP
3. Если у вас уже установленно соединение, но испоьзуется RAW сокет (т.е. вся мета информация формируется в ручную), то тут тоже следует произвести п. 2.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.023 секунд. Запросов: 19.