gpt4 book ai didi

c++ - 重新连接 QTcpServer

转载 作者:行者123 更新时间:2023-11-28 04:44:25 26 4
gpt4 key购买 nike

我正在编写客户端-服务器应用程序,它使用 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有什么问题?此外,服务器和客户端始终在常量端口上运行,例如服务器为 1234,客户端为 4321。这可能是问题所在吗?

最佳答案

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

比照文档:

void QTcpServer::close()

Closes the server. The server will no longer listen for incoming connections.

关于c++ - 重新连接 QTcpServer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49569011/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com