2013-05-26 5 views
1

Попытка подключения:QTcpSocket - Проверьте, подключен

QTcpSocket *tcpClient = new QTcpSocket(this); 
tcpClient->connectToHost(ip_address, portNumber); 

Но connectToHost возвращает ничтожным.
Итак, что мне делать, чтобы проверить, подключен ли tcpClient к указанному адресу и порту?
Как я могу дать этой попытке подключения разрешенный тайм-аут и проверить состояние соединения при истечении времени ожидания?

ответ

4

QAbstractSocket::waitForConnected даст вам именно то, что вы хотите, если сможете заблокировать текущий поток до соединения или таймаута. Если нет, используйте сигнал QAbstractSocket::stateChanged. Например. в вашем объявлении класса есть

class C 
{ 
    public slots: 
     void HandleStateChange(AbstractSocket::SocketState socketState); 
    ... 
}; 

определить это, очевидно, и то после того, как tcpClient объявлен есть

connect(tcpClient, SIGNAL(stateChanged(AbstractSocket::SocketState)), 
      this, SLOT(HandleStateChange(AbstractSocket::SocketState))); 

Это, в сочетании с синхронизированными запросами к tcpClient->state(), покажет вам именно то, что происходит в socket и дать вам возможность ответить на него.

+0

Кажется, пропустил скобку на 'connect' :) Как я могу редактировать только пасетезис? – CDT

+0

@CDT Я думаю, что система вынуждает сторонних редакторов делать дольше правки, я сам это видел - но спасибо, позаботились! –

Смежные вопросы