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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSocket - как прочитать большой текст?  (Прочитано 6550 раз)
Demonn
Гость
« : Декабрь 19, 2005, 14:31 »

Добрый день!
В качестве клиента использую описанный в примерах QT ClientSocket, наследующийся от QSocket. Все работает нормально, пока принимаются небольшае блоки данных. Когда же попробовал принять текст размеров в 1Мб, то получил, что он принимается блоками, где по 4Кб, а так как этот текст  является xml-скриптом, то, естественно, при попытке обработки возникает ошибка, т.к. вместо одного цельного текста программа пытается обработать кучу "нарезок".
Как определить, что принят весь блок? Вот описание функции readClient()

Код:
void ClientSocket::readClient()
{
QString text;
QTextStream ts( this );
text = ts.read();

if (text.length() > 10)
emit getText(this, text);
}
Записан
Dendy
Гость
« Ответ #1 : Декабрь 19, 2005, 15:17 »

Я так розумію в тебе Qt 3.x
В Qt 4 можна заюзати:

Код:
QXmlSimpleReader::parse( input, true );
QXmlSimpleReader::parseContinue();
Записан
Demonn
Гость
« Ответ #2 : Декабрь 19, 2005, 15:26 »

> Dendy
Верно разумеешь Улыбающийся
Вот только если уйти от xml, а остановится на произвольном тексте - как определить, весь он получен или нет?
Записан
Dendy
Гость
« Ответ #3 : Декабрь 19, 2005, 15:46 »

Пересилай перші 4 (2? 8?) байт розмір текста, далі сам текст шматками.
Записан
DenKor
Гость
« Ответ #4 : Декабрь 20, 2005, 08:57 »

Надо вводить пересылку управляющей информации.
Например в начале пересылки отправить структуру фиксированной длины
имя файла
его размер
и т.д.

Соответсвенно в конце опять передаешь блок управляющей информации.

Например смотри реализацию протокола binkp
Где все это реализовано.
Иначе никак
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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