C++ Qt:服务器应该广播变化的值,客户端应该监听它

C++ Qt:服务器应该广播变化的值,客户端应该监听它,c++,qt,client,qtcpserver,C++,Qt,Client,Qtcpserver,我写了一个计算圆周率的程序。它近似于3.14 现在我想知道我的程序目前计算的是哪个位置。但我不想在电脑前等。因此,我实现了一个QTcpServer,并且可以作为客户端访问服务器。连接工作正常。在下一步中,我想通过服务器发送Pi的当前值和数字广播。每次客户端连接服务器时,客户端都应该读取这些信息。这些信息会不断更新,只要客户保持连接,他就应该获得这些信息。为了更新客户端的传入信息,我需要一些通知或轮询功能。如何实现信息服务器和更新通知客户端的广播 标题 #include <QObject&g

我写了一个计算圆周率的程序。它近似于3.14

现在我想知道我的程序目前计算的是哪个位置。但我不想在电脑前等。因此,我实现了一个QTcpServer,并且可以作为客户端访问服务器。连接工作正常。在下一步中,我想通过服务器发送Pi的当前值和数字广播。每次客户端连接服务器时,客户端都应该读取这些信息。这些信息会不断更新,只要客户保持连接,他就应该获得这些信息。为了更新客户端的传入信息,我需要一些通知或轮询功能。如何实现信息服务器和更新通知客户端的广播

标题

#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


int值应该模拟Pi值。

[p>[更新]可以使用QUdpSocket进行广播。qtsdk有很多很好的例子,包括广播和示例


此外,无法使用TCP协议进行广播。

嗨,这就是我现在正在做的。但是如果客户端连接到服务器,这就完成了。我正在搜索的是更新功能。对于每个更改的值,信息应该由服务器广播并由客户端接收。好的,谢谢,我想这会对我有所帮助。但是为什么不能通过QTcpSocket发送信息呢?它已经可以与write和flush一起使用。。。套接字->写客户端已连接\r\n;TCP协议不支持广播。它不是为这个目的而设计的。
#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();
    }