Russian Qt Forum

Qt => Работа с сетью => Тема начата: Sir_J от Август 12, 2005, 15:32



Название: QSocket и очень много данных
Отправлено: Sir_J от Август 12, 2005, 15:32
Как в Qt правильно прочитать данные и сокета.
если их очень много ?
У нас есть сервер на который мы телнетимся(telnet localhost port), и он сразу отдаем много данных (около 500Kb).

Если использовать такой код
Код:

while ( socket->canReadLine() ) {
xml += socket->readLine();    
}

то мы читаем только 1024 символа и все :(
Если использовать такой код
Код:

while ( socket->canReadLine() ) {
xml += socket->readLine();    
socket->waitForMore(-1);
}
   
то читаем ~ 130 Kb а дальше все финиш :(

Как же правильно прочитать много данных ?
Читать порциями (как ?)
Очищать буфер перед приемом новых данных  (как?)
Если можно приведите кусочек рабочего кода
Спасибо.


Название: QSocket и очень много данных
Отправлено: Sergeich от Август 12, 2005, 15:58
Все зависит от того как ты хочешь работать с сокетом - синхронно или асинхронно, и от признака конца сообщения ( если он вообще есть )


Название: QSocket и очень много данных
Отправлено: DenKor от Август 12, 2005, 15:58
Если я не ошибаюсь, то надо использовать функцию чтения данных в качестве слота, а не вызывать непосредственно.


Название: QSocket и очень много данных
Отправлено: west от Август 12, 2005, 17:43
По-моему, надо читать до тех пор, пока socket->bytesAvialble()...


Название: QSocket и очень много данных
Отправлено: Sir_J от Август 13, 2005, 13:42
Всем спасибо
проблема решена

Я просто для того чтобы проверить все ли данные пришли
пытался вывести их qWarning ом у которого внутренний буфер ограничен
:)