我用以下代码在服务器端重载了 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)
.