Здравствуйте!
Не могу решить такую задачу: Соединяюсь с 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