Название: QTcpSocket сигнал readyRead Отправлено: mks от Декабрь 10, 2012, 00:10 Добрый день.
Есть tcp соединение. Передатчик с помощью функции QTcpSocket.write() пишет команды вида: QTcpSocket.write("command1:"); QTcpSocket.write("command2:"); : - это разделитель команд. Правильно я понимаю, что на приёмнике нет гарантии что по сигналу QTcpSocket.readyRead() я получу в приёмном буфере сокета целиком всю последовательность ("command1:"), и в общем случае надо приходящие кусочки данных склеивать в каком-то своём буфере, и там искать команду? Или всё что было записано одним вызовом write придёт без разрывов? Растолкуйте этот момент пожалуйста. :-\ Заранее спасибо. Название: Re: QTcpSocket сигнал readyRead Отправлено: mutineer от Декабрь 10, 2012, 00:16 Протокол TCP не гарантирует, что посылка длинной более одного байта придет сразу вся целиком, поэтому да, тебе надо склеивать в каком-то своем буфере. Ну или делать так, как сделано в примерах Qt: писать сначала длину посылки, затем саму посылку. На принимающей стороне читать сначала размер, а потом ждать пока в сокете будет доступно именно это количество байт и затем уже читать
Название: Re: QTcpSocket сигнал readyRead Отправлено: k0p4 от Декабрь 13, 2012, 16:18 http://qt-project.org/doc/qt-4.8/qabstractsocket.html#flush
Название: Re: QTcpSocket сигнал readyRead Отправлено: Igors от Декабрь 13, 2012, 16:59 Ну или делать так, как сделано в примерах Qt: писать сначала длину посылки, затем саму посылку. На принимающей стороне читать сначала размер, а потом .. Все верно, но этот метод известен задолго до рождения Qt :) А "или" можно смело убрать - другой разумной схемы здесь не видноНазвание: Re: QTcpSocket сигнал readyRead Отправлено: mks от Декабрь 13, 2012, 17:02 Всем спасибо, разобрался.
|