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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QTcpSocket. Задержка в получении данных  (Прочитано 4874 раз)
Naihil
Новичок

Offline Offline

Сообщений: 23


Просмотр профиля
« : Июнь 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 минуты.
В чём может быть причина?
Записан
Rcus
Гость
« Ответ #1 : Июнь 09, 2009, 16:04 »

while (tcpSocket->canReadLine()) {
...
}
Записан
Naihil
Новичок

Offline Offline

Сообщений: 23


Просмотр профиля
« Ответ #2 : Июнь 09, 2009, 16:52 »

while (tcpSocket->canReadLine()) {
...
}
Спасибо, помогло Улыбающийся
Записан
lighting
Гость
« Ответ #3 : Октябрь 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
Записан
Rcus
Гость
« Ответ #4 : Октябрь 22, 2009, 16:39 »

И...? Во-первых ваша находка относится к Q3Socket, а во-вторых как это относится к проблеме считывания множества строк в ответ на сигнал о новых данных?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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