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 для трансляции.