我正在编写客户端服务器应用程序,它使用QTcpSocket和QTcpServer。以下是断开的()插槽:
服务器:
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()
发出信号,但是
server->hasPendingConnections()
返回false,因此我无法将套接字分配给
socket = server->nextPendingConnection()
重新连接QTcpServer有什么问题?此外,服务器和客户端总是运行在const端口,e.x。1234用于服务器,4321用于客户机。这会是问题吗?
发布于 2018-03-30 15:23:29
server->close()结束服务器的操作。它将不再接受任何连接,任何挂起的连接也将立即关闭。在newConnection信号的发射和hasPendingConnections的使用之间有一场竞赛。后者提供了一个正确的答案--服务器在此时关闭。
C.f.文件:
void QTcpServer::close()关闭服务器。服务器将不再侦听传入的连接。
https://stackoverflow.com/questions/49569011
复制相似问题