0

我用以下代码在服务器端重载了​​ QTcpServer 的incomingConnection 函数

void CtiServer::incomingConnection(int socketDescriptor)
{
    qDebug() << QString("CtiServer thread id = %1, thread = %2").arg(QString::number((uint)QThread::currentThreadId(), 16)).arg(QString::number((qlonglong)QThread::currentThread(), 16));
    ServerThread *thread = new ServerThread(socketDescriptor, this);
    connect(thread, SIGNAL(finished()), thread, SLOT(deleteLater()));
    thread->start();
}

然后在每个线程中,我创建了一个名为 ServerSocket 的新 QTcpSocket 子类对象,

void ServerThread::run()
{
    qDebug() << QString("ServerThread thread id = %1, thread = %2").arg(QString::number((uint)QThread::currentThreadId(), 16)).arg(QString::number((qlonglong)QThread::currentThread(), 16));
    serverSocket = new ServerSocket();
    serverSocket->setSocketDescriptor(socketDescriptor);
    connect(serverSocket, SIGNAL(readyRead()), serverSocket, SLOT(handleRequest()));
    serverSocket->waitForDisconnected(-1);
}

问题是serverSocket->waitForDisconnected(-1)对还是错。

我正在尝试使用此语句维护套接字,util client 发送一些消息以通知服务器套接字应该关闭连接,以便我可以在服务器和客户端之间保持长连接。

结果,我可以连接断开的信号并知道客户端何时关闭,而无需费心设置一些心跳协议来检测客户端是还活着还是死了。

或者我应该设置一个心跳协议并使用如下代码:

sock.disconnectFromHost();
sock.waitForDisconnected();

而不是sock.waitForDisconnected(-1).

4

0 回答 0