Проверка соединения через сокет Qt TCP/IP

Я пишу клиент Qt TCP/IP. Я хочу проверить состояние соединения с сервером, прежде чем отправлять данные на сервер. Насколько мне известно, я могу сделать это, используя следующие методы

  • Используйте bool 'ConnectionState', установите эту переменную при соединении с сервером и сбросьте эту переменную по сигналу disconnected(). Теперь перед отправкой данных на сервер (client->write()) проверьте значение этой переменной.
  • используйте этотметод client->state() == QTcpSocket::ConnectedState для проверки состояния соединения.

Что является хорошей практикой. Или любой другой метод к этому.

Заранее спасибо.

2 ответа

Решение

QTCPSocket происходит от QAbstractSocket, который обеспечивает state() функция. Это возвращает одно из следующих перечислений: -

enum SocketState { UnconnectedState, HostLookupState, ConnectingState, ConnectedState, ..., ListeningState }

Итак, предполагая, что m_pSocket является QTcpSocket, вы бы просто сделали это, чтобы проверить, подключен ли он: -

bool connected = (m_pSocket->state() == QTcpSocket::ConnectedState);

Вы можете добавить логическое значение и отслеживать состояние, но если возникает ошибка сети, вам необходимо убедиться, что она всегда синхронизирована с фактическим состоянием соединения.

Вы можете использовать errorOccurredsignal и достаточно для этого сигнала определить слот в клиенте. при возникновении ошибки срабатывает сигнал, и вы можете получить уведомление в функции слота.

В клиенте.ч

      /* define a slot for client */
public slots:
    void errorOccurred(QAbstractSocket::SocketError error);

В клиенте.с

      /*client constructor*/
Client::Client(QObject *parent) {
/*some other code here*/
    connect(socket, SIGNAL(errorOccurred(QAbstractSocket::SocketError)),
        this, SLOT(errorOccurred(QAbstractSocket::SocketError)));

/*and maybe some other code here*/
}

и в client.c напишите реализацию для errorOccurred:

      void Client::errorOccurred(QAbstractSocket::SocketError error) {
    qDebug() << "error in connection: " << socket->errorString();
}

ВЫХОД:

      error in connection:  "Connection refused"
Другие вопросы по тегам