Russian Qt Forum

Qt => Работа с сетью => Тема начата: Sir_J от Июль 22, 2005, 20:42



Название: QT и синхронные сокеты
Отправлено: Sir_J от Июль 22, 2005, 20:42
есть код
Код:

.....................................
socket = new QSocket( this );
socket->connectToHost( host, port);
QTextStream os(socket);
os << doc.toString() << QChar(4);
QString xml;
while ( socket->canReadLine() )   xml += socket->readLine();
  qWarning(xml);
socket->close();
this->close();

он не работает qWarning ничего не выдает
но если сделать так
Код:

.................................................
socket = new QSocket( this );
connect( socket, SIGNAL(readyRead()), SLOT(socketReadyRead()) );
socket->connectToHost( host, port);
QTextStream os(socket);
os << doc.toString() << QChar(4);
return;
}    

void modalForm::socketReadyRead()
{
QString xml;
while ( socket->canReadLine() )   xml += socket->readLine();
        qWarning(xml);  
socket->close();
this->close();
}

то получаем то что нужно (в xml содержится ответ сервера)
как переделать этот код что бы он работал синхронно ?
то есть как заставить работать 1 ый вариант ?


Название: QT и синхронные сокеты
Отправлено: Sergeich от Июль 25, 2005, 16:35
Если тебе нужен синхронный сокет - юзай QSocketDevice


Название: QT и синхронные сокеты
Отправлено: Stinky от Июль 29, 2005, 10:18
Можно попробовать использовать socket->socketDevice()

Код:
socket->socketDevice()->setBlocking(true);
// Синхронная работа с сокетом
socket->socketDevice()->setBlocking(false);


Название: QT и синхронные сокеты
Отправлено: Sir_J от Июль 30, 2005, 16:37
Спасибо
P.S не работает :(