我写了一个计算Pi的程序。它近似于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
#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
应该模拟Pi值。
答案 0 :(得分:0)
[已更新]可以使用QUdpSocket
进行广播。 Qt SDK在broadcasting implementation(广播receiver和sender示例)中提供了很好的示例。
此外,无法使用TCP协议进行广播。