Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在qt中维护tcp套接字?_Qt_Sockets_Networking - Fatal编程技术网

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

如何在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

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

您应该使用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();