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

QTCPSocketのもう一方の端にあるクライアントにデータを送信するなど、いくつかの「 QIODevice」関数を使用する必要があります。write<<

したがって、Webページをブラウザクライアントに提供している場合は、最初にその要求をリッスン(または読み取りコマンドを使用)してから、使用しているプロトコルに従って適切な応答を送信します。

したがって、最初にこのサーバーをコンピューターのポート80にセットアップしてから、ブラウザーを開いてhttp://localhost。次に、qDebugを使用して、ブラウザーから要求を出力します。

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

それが機能した後、リクエストをどのように解析するか、次にどのように応答するか、またはどのデータを提供するかを決定します。

また、「 QTCPSocketについても参照してください」のTCPの例を必ず確認してください。

お役に立てば幸いです。

于 2012-11-16T09:56:26.813 に答える