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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как получить ответ от QTcpSocket?  (Прочитано 4049 раз)
Skala
Гость
« : Май 17, 2007, 06:50 »

Здравствуйте!
Не могу решить такую задачу: Соединяюсь с QTcpSocket, посылаю команду STAT, и мне приходит пустой ответ.
Проблема усугубляется тем, что пишу GUI-программу. Ее консольный вариант работает нормально.
Если я правильно понял собственный перевод манов ( :-) ), то функция waitForReadyRead, которую я использовал в консольном варианте, может заморозить интерфейс, и лучше вместо нее использовать сигналы. Так и поступил:
Код:
ServerSocket = new QTcpSocket(this);
connect(ServerSocket,SIGNAL(readyRead()),this,SLOT(readFromServer()));
connect(ServerSocket,SIGNAL(connected()),this,SLOT(ConnectedToServer()));
connect(ServerSocket,SIGNAL(error(QAbstractSocket::SocketError )),this,SLOT(errorFromServer(QAbstractSocket::SocketError)));
connect(ServerSocket,SIGNAL(stateChanged(QAbstractSocket::SocketState)), this,SLOT(StateChanged(QAbstractSocket::SocketState)));
...

void mainWindow::ConnectedToServer(){
qDebug("Connected!(from slot).");
ServerSocket->write(USER.toAscii());
ServerSocket->write(PASS.toAscii());
ServerSocket->flush();
//Сразу же даю команду:
ServerSocket->write("STAT\n\r");
ServerSocket->flush();
qDebug("reply stat:");
qDebug()<<ReplyFromSocket;
ServerSocket->write("QUIT\n\r");
ServerSocket->flush();
...

void mainWindow::readFromServer(){
qDebug("BeginReading");
QString reply="";
while(ServerSocket->canReadLine())
  reply.append(POPServerSocket->readLine());
ReplyFromSocket = reply;
qDebug("EndReading");
}

В результате у меня такой вывод дебажных сообщений:
Цитировать
Connected!(from slot).
BeginReading
"+OK Hello there.
"
EndReading
reply stat:
"+OK Hello there.
"
BeginReading
"+OK Password required.
"
EndReading
BeginReading
"+OK logged in.
+OK 24 337918
+OK Bye-bye.
"
EndReading
Там, где предполагается, что будет ответ от STAT в глобальной переменной ReplyFromSocket, приходит пустое значение.
Перепробовал разные варианты. Как на самом деле нужно получать ответы от QTcpSocket?
P.S.
Qt: 4.3b
OS: Linux
Записан
Skala
Гость
« Ответ #1 : Май 18, 2007, 20:45 »

В общем сделал так:
Код:
QTextStream out(ServerSocket);
out<<messageToServer<<endl;
ReplyFromSocket = waitForReplyAndTakethis( );
...
QString mainWindow::waitForReplyAndTakethis(  ){
//waitForReply
QString re = "";
do{
ServerSocket->waitForReadyRead(500);
}while (ServerSocket->bytesAvailable()==0);
//and Take This
re = ServerSocket->readAll();
return re;
}
Хорошо ли плохо ли- не знаю. Вроде работает.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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