1

尝试连接:

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

connectToHost返回无效。
那么我应该怎么做才能检查是否tcpClient连接到给定的地址和端口?
我怎样才能给这个连接尝试一个允许的超时并在超时到期时检查连接状态?

4

1 回答 1

5

如果您能够阻止当前线程直到连接或超时, 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(),将准确地告诉您套接字发生了什么并让您对其做出响应。

于 2013-05-26T05:46:37.550 回答