如何在qt中维护tcp套接字?

时间:2012-09-04 01:04:28

标签: qt sockets networking

我已经在服务器端重载了​​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)

0 个答案:

没有答案