Russian Qt Forum

Qt => Работа с сетью => Тема начата: Naihil от Июнь 09, 2009, 15:31



Название: QTcpSocket. Задержка в получении данных
Отправлено: Naihil от Июнь 09, 2009, 15:31
Здравствуйте! Столкнулся со следующей проблемой:
В локальной сети есть сервер, который по определённому порту отсылает данные в виде строки текста, которые содержат дату создания. Данные посылаются нерегулярно, но в среднем 3-5 строк в секунду. Необходимо написать тулзу, которая бы эти данные принимала, парсила и выдавала результат.
Код:
// создание сокета:
QTcpSocket *tcpSocket = new QTcpSocket( this );
connect(tcpSocket, SIGNAL( readyRead() ), this, SLOT( slotReadData() ) );
connect( tcpSocket, SIGNAL(error(QAbstractSocket::SocketError)), this, SLOT(slotSocketError(QAbstractSocket::SocketError)) );
tcpSocket->connectToHost( "ip-адрес", порт );

// slotReadData()
void FirstWindow::slotReadData()
{
QByteArray ba;
ba = tcpSocket->readLine( tcpSocket->bytesAvailable() );
qDebug() << ba;
}
В принципе всё работает, но приложение не успевает обрабатывать приходящие данные. Если после старта приложения время получения строки почти совпадает с временем её создания, то минут через 10, разница составляет 2-3 минуты.
В чём может быть причина?


Название: Re: QTcpSocket. Задержка в получении данных
Отправлено: Rcus от Июнь 09, 2009, 16:04
while (tcpSocket->canReadLine()) {
...
}


Название: Re: QTcpSocket. Задержка в получении данных
Отправлено: Naihil от Июнь 09, 2009, 16:52
while (tcpSocket->canReadLine()) {
...
}
Спасибо, помогло :)


Название: Re: QTcpSocket. Задержка в получении данных
Отправлено: lighting от Октябрь 22, 2009, 14:45
извините конечно что старую тему поднимаю, но вот что в Qt Assistant'е нашел:
Note that if the peer closes the connection unexpectedly, this function returns false. This means that loops such as this won't work:

 while( !socket->canReadLine() ) // WRONG


Название: Re: QTcpSocket. Задержка в получении данных
Отправлено: Rcus от Октябрь 22, 2009, 16:39
И...? Во-первых ваша находка относится к Q3Socket, а во-вторых как это относится к проблеме считывания множества строк в ответ на сигнал о новых данных?