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, кстати, тоже работает .