Russian Qt Forum

Qt => Работа с сетью => Тема начата: Skala от Май 10, 2007, 18:48



Название: Получение почты на Qt - застопорилось в начале
Отправлено: Skala от Май 10, 2007, 18:48
Делаю подключение к серверу:
Код:
QTcpSocket *maso = new QTcpSocket();
maso->connectToHost("pop.yandex.ru",110);
maso->write("USER user");
maso->write("PASS password");
maso->write("LIST");
//А вот тут проблемы...
buffer  = maso->read(sizeof(buf));
QMessageBox::information(this,"0",buffer);
QMessageBox::information(this,"0",QString::number(buffer.size()));
Первое сигнальное сообщение - По идее то, что должно выдать мне LIST. Вторым я убеждаюсь, что крепко ошибся и на самом деле ничего не приходит. Подскажите, где грабли?
P.S.
Qt 4.2. Linux.


Название: Получение почты на Qt - застопорилось в начале
Отправлено: alexis от Май 10, 2007, 19:16
Грабли в том, что в Qt используется асинхронная передача/прием данных.
Юзаем сигналы...
Внимательнее курим доки по qt


Название: Получение почты на Qt - застопорилось в начале
Отправлено: Sergeich от Май 11, 2007, 01:53
Цитировать

Грабли в том, что в Qt используется асинхронная передача/прием данных.
Юзаем сигналы...
Внимательнее курим доки по qt
Отнюдь. В 4-ке без роблем реализуется синхронная передача. Курим доку:
Цитировать
QAbstractSocket provides a set of functions that suspend the calling thread until certain signals are emitted. These functions can be used to implement blocking sockets:
waitForConnected() blocks until a connection has been established.
waitForReadyRead() blocks until new data is available for reading.
waitForBytesWritten() blocks until one payload of data has been written to the socket.
waitForDisconnected() blocks until the connection has closed.


Название: Получение почты на Qt - застопорилось в начале
Отправлено: Skala от Май 11, 2007, 08:26
Код:
QTcpSocket *maso = new QTcpSocket(); 
maso->connectToHost("pop.yandex.ru",110);
if (maso->waitForConnected())
qDebug("Connected!");
maso->waitForBytesWritten();
maso->write("USER user");
maso->waitForReadyRead();
//По идее- проверка пользователя
qDebug() << maso->readAll().data();
...
И на этом месте виснет. Что я не правильно понял?


Название: Получение почты на Qt - застопорилось в начале
Отправлено: Tonal от Май 11, 2007, 10:09
flush() после write("USER user")?


Название: Получение почты на Qt - застопорилось в начале
Отправлено: Admin от Май 11, 2007, 10:35
я с POP не работал
но не забыли ли вы \n\r - как в HTTP


Название: Получение почты на Qt - застопорилось в начале
Отправлено: Skala от Май 11, 2007, 10:41
Благодарю всех за помощь!
Действительно, \n\r помог. Без flush, кстати, тоже работает .