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