1

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

先感谢您!

问候

4

1 回答 1

1

您需要使用一些 ' QIODevice ' 功能,例如write<<向位于 QTCPSocket 另一端的客户端发送数据。

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

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

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

在你完成这项工作之后,决定你将如何解析请求,然后你将如何响应,或者你想要提供哪些数据。

此外,请务必查看另请参阅 QTCPSocket 中的TCP示例

希望有帮助。

于 2012-11-16T09:56:26.813 回答