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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Получение почты на Qt - застопорилось в начале  (Прочитано 6729 раз)
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.
Записан
alexis
Гость
« Ответ #1 : Май 10, 2007, 19:16 »

Грабли в том, что в Qt используется асинхронная передача/прием данных.
Юзаем сигналы...
Внимательнее курим доки по qt
Записан
Sergeich
Гость
« Ответ #2 : Май 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.
Записан
Skala
Гость
« Ответ #3 : Май 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();
...
И на этом месте виснет. Что я не правильно понял?
Записан
Tonal
Гость
« Ответ #4 : Май 11, 2007, 10:09 »

flush() после write("USER user")?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Май 11, 2007, 10:35 »

я с POP не работал
но не забыли ли вы \n\r - как в HTTP
Записан
Skala
Гость
« Ответ #6 : Май 11, 2007, 10:41 »

Благодарю всех за помощь!
Действительно, \n\r помог. Без flush, кстати, тоже работает .
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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