"Склеивание" сообщений ТСР |
Здравствуйте, гость ( Вход | Регистрация )
"Склеивание" сообщений ТСР |
pwp2008 |
27.10.2015, 19:49
Сообщение
#11
|
Студент Группа: Участник Сообщений: 29 Регистрация: 19.12.2014 Пользователь №: 4299 Спасибо сказали: 0 раз(а) Репутация: 0 |
4 байта было сказано для примера, ты сам решай, какой длины будет у тебя поле длина пакета. К тому же жестко указывать размер нельзя, а только sizeof(int), так как под разными системами int разного размера. ............................ Большое спасибо за пример. Еще, если можно, ряд уточнений. 1. Для моей задачи длина сообщений от 14 до 130 байт, поэтому вполне для длины хватит и 1-го байта. Прилично ли считывать 1 байт? Хотя, судя по тому, что и 4 байта могут идти частями, думаю, что вполне прилично. 2. Посоветуйте, какая технология может быть, чтобы не было 2-го входа в слот по сигналу ReadyRead ? Ведь вполне возможно, что пока я буду выделять и возможно обрабатывать "склееные" сообщения и\или ждать пока соберется все "разрезанное" сообщение, система может мне устроить второй вход в незаконченный слот. Реентерабельность тут как то не просматривается. Не снимать же connect по входу в слот обработки и назначать его потом снова перед выходом? signal(readyRead)\slot -> обработка сообщений ТСР по идеологии Qt. Я конечно попробую разобраться с вышеприведенным примером, т.к. в QT для сокета нет метода recv. |
|
|
ViGOur |
28.10.2015, 9:41
Сообщение
#12
|
Мастер Группа: Модератор Сообщений: 3296 Регистрация: 9.10.2007 Из: Москва Пользователь №: 4 Спасибо сказали: 231 раз(а) Репутация: 40 |
1. Почему нет? Ты можешь считать за один раз сколько тебе нужно, а там уже разобрать эти данные на 1 байт + данные + склеенное сообщение (если будет и отправить склеенной для следующего разбора)
2. Синхронизация, используй QMutex, чтобы пока один поток не отработал, другой не вошел для чтения. Метод recv был для примера, ты можешь так же в место него использовать read... |
|
|
pwp2008 |
29.10.2015, 19:14
Сообщение
#13
|
Студент Группа: Участник Сообщений: 29 Регистрация: 19.12.2014 Пользователь №: 4299 Спасибо сказали: 0 раз(а) Репутация: 0 |
1. Почему нет? Ты можешь считать за один раз сколько тебе нужно, а там уже разобрать эти данные на 1 байт + данные + склеенное сообщение (если будет и отправить склеенной для следующего разбора) ---------------------------------------------------------------------------------------- По обработке склеенных\разделенных блоков ТСР в Qt 4.5. Привожу лишь существенный код. Файл - mainwin_02.h
Файл - mainwin_02.cpp
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 3:13 |