如何在QTcpServer中访问QThread

时间:2012-11-16 09:12:20

标签: multithreading qt qthread qtcpserver

我刚刚创建了自己的QTcpServer实现并重载了incomingConnection函数。

void Server::incomingConnection(int handle) //Server inherits from QTcpServer
{
    qDebug()<<"Server::incomingConnection"<<handle;
    Thread *thread = new Thread(handle,this);
    connect(thread,SIGNAL(finished()),this,SLOT(deleteLater()));
    thread->start();
}

在线程中我做了以下事情:

void Thread::run()
{
    qDebug() << m_socketDescriptor << "Starting Thread";
    m_socket = new QTcpSocket();
    if(!m_socket->setSocketDescriptor(m_socketDescriptor))
        return;

    connect(m_socket,SIGNAL(readyRead()),this,SLOT(readyRead()));
    connect(m_socket,SIGNAL(disconnected()),this,SLOT(disconnected()));

    qDebug() << m_socketDescriptor << "Client connected";

    exec();
}

现在我有一个多线程服务器。

但是如何才能访问连接的客户端并通过它们发送数据。一个gui?

提前谢谢!

此致

1 个答案:

答案 0 :(得分:1)

您需要使用某些“QIODevice”函数(例如write<<)将数据发送到QTCPSocket另一端的客户端。

因此,如果您正在向浏览器客户端提供网页,那么您首先要听取(或使用读取命令)到他们的request,然后根据您使用的协议发送相应的response

所以我首先在您的计算机上的端口80上设置此服务器,然后打开浏览器http://localhost。然后使用qDebug打印出来自浏览器的请求。

void Thread::readyRead()
{
    qDebug() << Q_FUNC_INFO;
    qDebug() << m_socket.readAll();
}

完成工作后,决定如何解析请求,然后决定如何回复,或者要提供哪些数据。

另外,请务必查看See also QTCPSocket中的TCP示例。

希望有所帮助。