Как я могу получить доступ к 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();
}

Теперь у меня многопоточный сервер.

Но как я могу получить доступ к подключенным клиентам и отправить им данные через. графический интерфейс?

Заранее спасибо!

С уважением

1 ответ

Решение

Вам необходимо использовать некоторые функции QIODevice, такие как write или же << отправить данные клиенту, который находится на другом конце QTCPSocket.

Поэтому, если вы передаете веб-страницы клиенту браузера, вы сначала слушаете (или используете команды чтения) их запрос, а затем отправляете соответствующий ответ в соответствии с протоколом, который вы используете.

Поэтому я сначала настроил этот сервер на порт 80 на вашем компьютере, а затем открыл браузер для http://localhost, Затем используйте qDebug для распечатки запросов из вашего браузера.

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

После того, как у вас это получится, решите, как вы собираетесь анализировать запрос, а затем, как вы собираетесь отвечать или какие данные вы хотите обслуживать.

Кроме того, обязательно ознакомьтесь с примерами TCP в См. Также для QTCPSocket.

Надеюсь, это поможет.

Другие вопросы по тегам