Russian Qt Forum

Qt => Работа с сетью => Тема начата: Demonn от Декабрь 19, 2005, 14:31



Название: QSocket - как прочитать большой текст?
Отправлено: 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);
}


Название: QSocket - как прочитать большой текст?
Отправлено: Dendy от Декабрь 19, 2005, 15:17
Я так розумію в тебе Qt 3.x
В Qt 4 можна заюзати:

Код:
QXmlSimpleReader::parse( input, true );
QXmlSimpleReader::parseContinue();


Название: QSocket - как прочитать большой текст?
Отправлено: Demonn от Декабрь 19, 2005, 15:26
> Dendy
Верно разумеешь :)
Вот только если уйти от xml, а остановится на произвольном тексте - как определить, весь он получен или нет?


Название: QSocket - как прочитать большой текст?
Отправлено: Dendy от Декабрь 19, 2005, 15:46
Пересилай перші 4 (2? 8?) байт розмір текста, далі сам текст шматками.


Название: QSocket - как прочитать большой текст?
Отправлено: DenKor от Декабрь 20, 2005, 08:57
Надо вводить пересылку управляющей информации.
Например в начале пересылки отправить структуру фиксированной длины
имя файла
его размер
и т.д.

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

Например смотри реализацию протокола binkp
Где все это реализовано.
Иначе никак