Russian Qt Forum
Ноябрь 23, 2024, 17:18 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket сигнал readyRead  (Прочитано 4320 раз)
mks
Гость
« : Декабрь 10, 2012, 00:10 »

Добрый день.
Есть tcp соединение. Передатчик с помощью функции QTcpSocket.write() пишет команды вида:
QTcpSocket.write("command1:");
QTcpSocket.write("command2:");
: - это разделитель команд. Правильно я понимаю, что на приёмнике нет гарантии что по сигналу QTcpSocket.readyRead() я получу в приёмном буфере сокета целиком всю последовательность ("command1:"), и в общем случае надо приходящие кусочки данных склеивать в каком-то своём буфере, и там искать команду? Или всё что было записано одним вызовом write придёт без разрывов? Растолкуйте этот момент пожалуйста.  В замешательстве
Заранее спасибо.
Записан
mutineer
Гость
« Ответ #1 : Декабрь 10, 2012, 00:16 »

Протокол TCP не гарантирует, что посылка длинной более одного байта придет сразу вся целиком, поэтому да, тебе надо склеивать в каком-то своем буфере. Ну или делать так, как сделано в примерах Qt: писать сначала длину посылки, затем саму посылку. На принимающей стороне читать сначала размер, а потом ждать пока в сокете будет доступно именно это количество байт и затем уже читать
Записан
k0p4
Гость
« Ответ #2 : Декабрь 13, 2012, 16:18 »

http://qt-project.org/doc/qt-4.8/qabstractsocket.html#flush
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #3 : Декабрь 13, 2012, 16:59 »

Ну или делать так, как сделано в примерах Qt: писать сначала длину посылки, затем саму посылку. На принимающей стороне читать сначала размер, а потом ..
Все верно, но этот метод известен задолго до рождения Qt  Улыбающийся А "или" можно смело убрать - другой разумной схемы здесь не видно
Записан
mks
Гость
« Ответ #4 : Декабрь 13, 2012, 17:02 »

Всем спасибо, разобрался.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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