Qt: Сервер должен передавать изменяющееся значение, а клиент должен его слушать

Я написал программу, которая рассчитывает Пи. Он аппроксимирует позиции цифр после 3,14...

Теперь я хочу знать, какая позиция рассчитывается моей программой в данный момент. Но я не хочу ждать перед компьютером. Поэтому я реализую QTcpServer и возможность доступа к серверу в качестве клиента. Связь работает нормально. На следующем шаге я хотел бы отправить текущее значение числа Пи и количество цифр, передаваемых через сервер. Каждый раз, когда клиент подключается к серверу, клиент должен прочитать эту информацию. Информация постоянно обновляется, и клиент должен получать эту информацию, пока он подключен. Для обновления входящей информации клиента мне нужны некоторые функции уведомления или опроса. Как реализовать передачу информации (сервер) и уведомление об обновлении (клиент).

заголовок

#include <QObject>
#include <QDebug>
#include <QTcpServer>
#include <QTcpSocket>

class HTTPServer : public QObject
{
    Q_OBJECT
public:
    explicit HTTPServer(QObject *parent = 0);

    int value;

signals:

public slots:
    void newConnection();
    void readClient();

private:
    QTcpServer *server;
    QTcpSocket *socket;

};

CPP

#include "httpserver.h"

    HTTPServer::HTTPServer(QObject *parent) :
        QObject(parent)
    {
        server = new QTcpServer(this);

        connect(server, SIGNAL(newConnection()), this, SLOT(newConnection()));

        if(!server->listen(QHostAddress::Any, 9999))
            qDebug() << "Server could not started!";
        else
            qDebug() << "Server started and listening ...";
    }

    void HTTPServer::calculate()
    {
        for(int i = 0; i < 100000000; i++)
            value = i;
    }

    void HTTPServer::newConnection()
    {
        socket = server->nextPendingConnection();

        socket->write("client connected\r\n");
        socket->flush();
        socket->waitForBytesWritten(3000);

        this->calculate();

        char buffer [50];
        sprintf(buffer, "%d\r\n", value);
        socket->write(buffer);
        socket->flush();
        socket->waitForBytesWritten(3000);

        connect(socket, SIGNAL(readyRead()), this, SLOT(readClient()), Qt::DirectConnection);
    }

    void HTTPServer::readClient()
    {
        QByteArray Data = socket->readAll();

        qDebug() << "Data in: " << Data;

        socket->write(Data);

        //if ((std::string stdString(Data.constData(), Data.length())) == "quitServer")
        //    server->close();
    }

int value должен имитировать значение Пи.

1 ответ

[Обновлено] Возможно сделать трансляцию с QUdpSocket, Qt SDK имеет отличные примеры с реализацией широковещания(примеры широковещательного приема и отправителя).

Также невозможно использовать протокол TCP для трансляции.

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