如何在qt中维护tcp套接字?
我在服务器端用以下代码重载了QTcpServer的incomingConnection函数如何在qt中维护tcp套接字?,qt,sockets,networking,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::nu
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();
}
您应该使用Client SIGNAL disconnected()并将其连接到服务器端,而不是
sock.waitForDisconnected(-1)
;按照skg的说法,并通过在函数末尾调用exec()进入线程的事件循环。waitForDisconnected正在阻止调用,因此套接字线程在套接字断开连接之前不会进行任何处理
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);
}
sock.disconnectFromHost();
sock.waitForDisconnected();