我正在编写客户端 - 服务器应用程序,它使用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。这可能是问题吗?
答案 0 :(得分:1)
server->close()
结束服务器的操作。它将不再接受任何连接,任何待处理的连接也将立即关闭。 newConnection
信号的发射和hasPendingConnections
的使用之间存在竞争。后者提供了正确答案 - 服务器在此时关闭。
C.f。文档:
void QTcpServer::close()
关闭服务器。服务器将不再侦听传入 连接。