Получение qnetworkReply :: protocolfialure, чтобы получить запросC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Получение qnetworkReply :: protocolfialure, чтобы получить запрос

Сообщение Anonymous »

Прошу прощения за длительный пост. Я пытаюсь создать удаленную программу, которая будет общаться с основной программой, работающей на SBC. Пульт дистанционного управления должен работать в браузере. Удаленное управление имеет пользовательский интерфейс для отправки управляющей информации, а также для запроса обновлений из основного приложения (так же, как эксплуатация осциллографа через веб -интерфейс). Приложение, я могу правильно получить данные из основного приложения. Однако, когда я составляю удаленное приложение с использованием webassembly, я получаю qnetworkReply :: protocolfielure каждый раз, когда получаю ответ от моего основного приложения.
Мониторинг связи HTTP, используя Wireshark, я вижу, что запрос GET и ответ отправляются Правильно. У клиента был виджет qtextedit для вывода отладки.

Код: Выделить всё

#include "mainwindow.h"
#include 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h

Код: Выделить всё

ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;

int const NETWORK_PORT_SERVER   {12345};
int const NETWORK_PORT_CLIENT   {23456};

QTcpServer *tcpServer;
QHttpServer hServer;
};
#endif // MAINWINDOW_H
mainwindow.cpp

Код: Выделить всё

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);

tcpServer = new QTcpServer(this);
tcpServer->listen(QHostAddress("192.168.86.48"), NETWORK_PORT_SERVER);
hServer.bind(tcpServer);

hServer.route("/", QHttpServerRequest::Method::Options, []()
{
QHttpServerResponse res(QHttpServerResponse::StatusCode::NoContent);
res.addHeader("Allow", "*");
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Language", "*");
res.addHeader("Access-Control-Allow-Encoding", "*");
res.addHeader("Access-Control-Allow-Method", "*");
res.addHeader("Access-Control-Allow-Headers", "*");
return res;
});

hServer.route("/", QHttpServerRequest::Method::Get, []()
{
QString testAnswer = "TEST REPLY";
QHttpServerResponse res(testAnswer, QHttpServerResponse::StatusCode::Ok);
return res;
});
}

MainWindow::~MainWindow()
{
delete ui;
}
< /code>
Мой тестовый клиент:
[b] main.cpp:[/b]
#include "mainwindow.h"
#include 
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
mainwindow.h:

Код: Выделить всё

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include 
#include 
#include 
#include 

QT_BEGIN_NAMESPACE
namespace Ui {
class MainWindow;
}
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;

int const NETWORK_PORT_SERVER   {12345};
int const NETWORK_PORT_CLIENT   {23456};

QNetworkAccessManager * manager;
QNetworkRequest req;

private slots:
void serverDataReceived(QNetworkReply *);
};
#endif // MAINWINDOW_H
mainwindow.cpp

Код: Выделить всё

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->debugInfo->append("Program Started");

manager = new QNetworkAccessManager(this);
connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(serverDataReceived(QNetworkReply*)));
QUrl contAdress(QString("http://192.168.0.84:%1").arg(NETWORK_PORT_SERVER));
req.setUrl(contAdress);
manager->get(req, "Test");
}

void MainWindow::serverDataReceived(QNetworkReply * rep)
{
ui->debugInfo->append("Reply Received");
QVariant status = rep->attribute(QNetworkRequest::HttpStatusCodeAttribute);
ui->debugInfo->append(status.toString());
ui->debugInfo->append(QString("Network Error:  %1").arg(static_cast(rep->error())));
ui->debugInfo->append(rep->readAll());
}

MainWindow::~MainWindow()
{
delete ui;
}
Кто -нибудь знает, почему это происходит и как это решить?

Подробнее здесь: https://stackoverflow.com/questions/794 ... et-request
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»