Получение и обработка пакетов TCP/IP |
Здравствуйте, гость ( Вход | Регистрация )
Получение и обработка пакетов TCP/IP |
RazrFalcon |
11.1.2011, 15:30
Сообщение
#1
|
Zombie Mod Группа: Участник Сообщений: 1654 Регистрация: 24.5.2010 Из: Харьков Пользователь №: 1752 Спасибо сказали: 64 раз(а) Репутация: 212 |
В этом я полный профан.
Вопрос вот в чем: есть устройство (на микроконтроллере), которое посылает пакеты (как то) по, грубо говоря, сетевому кабелю на комп, и на компе уже программа должна получать эти пакеты и выдирать из них данные, а потом, к примеру, рисовать график. Если говорю ну очень глупые вещи, ткните носом что нужно сначала прочесть, что бы хотя бы логику работы понять. Спасибо. |
|
|
Алексей1153 |
15.1.2011, 20:15
Сообщение
#2
|
фрилансер Группа: Участник Сообщений: 2941 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: 34 |
silver47, абсолютно без разницы, текст это будет или бинарные данные (текст, вернее ASCII, - это тоже бинарные данные, только 7-й бит равен нулю у всех байтов)
Для блочных данных в начале передается размер блока, затем уже сам блок, и читаем только тогда, когда QTcpSocket::bytesAvailable() больше этого блока. для простых случаев сканает, но для серьёзных решений не пойдёт. по хорошему, нужно ставить маркер начала (некий условный байт) - так мы точно знаем, что вот, например, тут может начаться сообщение, а всё до - мусор. Затем идёт общий участок, где содержится указание длины и контрольная сумма (например, CRC16 с полиномом 0x1021). Ждём, когда придёт достаточное количество данных. По достижении - проверяем КС. 1) не совпала - значит ищем следующий байт-маркер. 2) совпала - значит с большой вероятностью получено отдельное сообщение Кстати, не исключено, что в Qt уже есть готовое решение. Сообщение отредактировал Алексей1153 - 15.1.2011, 20:16 |
|
|
Текстовая версия | Сейчас: 15.1.2025, 22:47 |