重新连接QTcpServer

时间:2018-03-30 05:41:31

标签: c++ qt sockets qtcpsocket qtcpserver

我正在编写客户端 - 服务器应用程序,它使用QTcpSocket和QTcpServer。 这是disconnected()槽:

服务器

    void testServer::disconnected()
{
    socket = qobject_cast<QTcpSocket*>(sender());
    qDebug() << " - CLIENT DISCONNECTED";
    socket->disconnectFromHost();

    if(server->isListening())
    {
        server->close();
        qDebug() << " - SERVER CLOSED";
    }
}

客户端:

void testClient::disconnected()
{
    qDebug() << " - SERVER DISCONNECTED";
    tcpSocket->disconnectFromHost();
}

当我尝试模仿双方连接时可能发生的崩溃时,我会遇到奇怪的行为:当我关闭服务器时,我总是可以与客户端重新连接到新服务器。但是如果我在连接时关闭客户端,我可以将服务器重新连接到客户端两次。而且没有了。

在第三个“建立连接 - 重启客户端 - 连接到服务器”例程我总是失败。

  

QTcpServer既可:: newConnection()

发出

信号,但

  

服务器 - &GT; hasPendingConnections()

返回false,因此我无法使用

分配套接字
  

socket = server-&gt; nextPendingConnection()

重新连接QTcpServer有什么问题? 此外,服务器和客户端始终在const端口上运行,e.x。服务器1234,客户端4321。这可能是问题吗?

1 个答案:

答案 0 :(得分:1)

server->close()结束服务器的操作。它将不再接受任何连接,任何待处理的连接也将立即关闭。 newConnection信号的发射和hasPendingConnections的使用之间存在竞争。后者提供了正确答案 - 服务器在此时关闭。

C.f。文档:

  

void QTcpServer::close()

     

关闭服务器。服务器将不再侦听传入   连接。