【问题标题】:How can i get Access to a QThread in a QTcpServer如何访问 QTcpServer 中的 QThread
【发布时间】:2012-11-04 23:55:45
【问题描述】:

我刚刚自己实现了 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?

提前谢谢你!

问候

【问题讨论】:

  • 您是否以某种方式跟踪连接?

标签: multithreading qt qthread qtcpserver


【解决方案1】:

您需要使用一些'QIODevice'函数,例如write&lt;&lt; 来向QTCPSocket 另一端的客户端发送数据。

因此,如果您将网页提供给浏览器客户端,那么您首先要侦听(或使用读取命令)他们的 request,然后按照您使用的协议通过适当的 response 发送。

所以我会先在你电脑的 80 端口上设置这个服务器,然后打开浏览器到 http://localhost 。然后使用 qDebug 打印来自浏览器的请求。

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

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

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

希望对您有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-15
    • 2019-12-18
    • 2015-05-09
    • 1970-01-01
    • 2018-03-09
    • 2017-11-30
    • 1970-01-01
    • 2013-01-09
    相关资源
    最近更新 更多