我已经在服务器端重载了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客户端发送一些消息以通知服务器套接字应该关闭连接,以便我可以在服务器和客户端之间保持长连接。
因此,我可以连接断开连接的信号并知道客户端何时关闭,而无需设置一些心跳协议来检测客户端是否还活着或死亡。
或者我应该设置一个心跳协议并使用如下代码:
sock.disconnectFromHost();
sock.waitForDisconnected();
而不是sock.waitForDisconnected(-1)
。