QTcpSocket - 检查是否已连接

时间:2013-05-26 05:34:55

标签: c++ qt

尝试连接:

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

但是connectToHost返回无效 那么,如果tcpClient连接到给定的地址和端口,我应该怎么做?  如何在超时到期时为此连接尝试提供允许的超时并检查连接状态?

1 个答案:

答案 0 :(得分: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()的定时查询相结合,会告诉您套接字究竟发生了什么,让您回复它。