QTcpSocket и синхронный протокол, Как получать ответ |
Здравствуйте, гость ( Вход | Регистрация )
QTcpSocket и синхронный протокол, Как получать ответ |
canavar |
26.3.2009, 22:54
Сообщение
#1
|
Студент Группа: Новичок Сообщений: 14 Регистрация: 26.3.2009 Пользователь №: 643 Спасибо сказали: 0 раз(а) Репутация: 0 |
Все доброго вечера.
Непонятно, как решать вот такую проблему. Существует синхронный протокол передачи уровня приложения. Я посылаю команду, жду - приходит ответ. В простом режиме работы с QTcpSocket все понятно: создали, соединили сигналы со слотами. Отправляем данные, когда нам отвечают - вызывается слот OnReadyRead() и дальше делаем с данными все что хотим. Есть желание сделать метод, который будет возвращать весь ответ, то типа того: QStringList getAnswer(QString &cmd); То есть я вызываю этот метод с необходимой командой в параметре, а на выходе получаю список строк, который пришел от сервера. Такое вообще реально реализовать? Заранее спасибо. |
|
|
igor_bogomolov |
27.3.2009, 3:20
Сообщение
#2
|
Профессионал Группа: Сомодератор Сообщений: 1215 Регистрация: 22.3.2009 Из: Саратов Пользователь №: 630 Спасибо сказали: 235 раз(а) Репутация: 29 |
По поводу qWait(int msec) ничего сказать не могу, никогда ее не использовал. Хотя в ассистенте написано, что Gui и сетевой интерфейс она не блокирует. Правильно ли это тянуть с собой в приложении функционал из QTestLib?
Мне не совсем понятно, что значит "весь ответ". У Вас есть критерий, по которомы Вы можете определить, что все ожидаемые данные получены? Или единственным критерием будет являться то, что в соккет какое-то время данные не поступают. В любом случае, я вижу только два пути. Первое - организовать все через блокирующую функцию waitForReadyRead(int msecs), т.е. примерно так Раскрывающийся текст
Что, как сами понимаете, делать не стОит, т.к. Gui будет заблокированно на неопределенное время. (Хотя всегда можно добавить qApp->processEvents(). Но мне такой подход не нравится.) Во втором случае - это, как уже предлогалось, сделать все это в дочернем потоке. Правда структура проекта будет несколько иной, что Вы изначально хотели. Раскрывающийся текст
P.S. Коды не компилил. Надеюсь сильно нигде не облажался |
|
|
Текстовая версия | Сейчас: 25.4.2024, 9:09 |