编写C++程序与节点进行交互
【1】简单版本,需对http request有一定了解,以及QT的基本操作
测试环境:
- debian 9
- QT 5.5
- geth/v1.8.14
一、创建项目
(1)选择widgets application
(2)设置项目名
(3)设置基类等
二、界面元件
(1)双击ui文件,进入ui设计
(2)拖入如下元件
(3)界面设计如下:
(4)在pushbutton按钮上,右键,转到槽,选择clicked()
三、代码实现
(1)在.pro文件中加入如下:
QT +=network
(2)在mainwindow.h文件中几行,如下红色粗体标记:
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<QtNetwork/QNetworkReply>
#include<QtNetwork/QNetworkRequest>
#include<QtNetwork/QNetworkAccessManager>
namespace Ui {
class MainWindow;
}class MainWindow : public QMainWindow
{
Q_OBJECTpublic:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QNetworkAccessManager *manager; //声明网络管理器
private slots:
void on_pushButton_clicked();
void finishedSlot(QNetworkReply *reply);//槽函数
private:
Ui::MainWindow *ui;
};#endif // MAINWINDOW_H
(3) 在mainwindows.cpp中修改如下,红色粗体部分是需要加入的代码:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
this->setWindowTitle("Network request test");
manager=new QNetworkAccessManager(this);//实例化网络管理器
QObject::connect(manager,SIGNAL(finished(QNetworkReply*)),this,SLOT(finishedSlot(QNetworkReply*)));
}MainWindow::~MainWindow()
{
delete ui;
}void MainWindow::on_pushButton_clicked()
{
QUrl url(ui->lineEdit1->text());//初始化url
QByteArray data;//要post的数据定义
data.append(ui->lineEdit2->text());//将文本框内数据追加到data
QNetworkRequest request=QNetworkRequest(url);//设置rul
//http request header设置
request.setRawHeader("Content-Type", "application/json");
request.setRawHeader("Accept", "application/json");
//发送post
QNetworkReply* reply = manager->post(request, data);
}
void MainWindow::finishedSlot(QNetworkReply *reply)
{
//读取状态?
// Reading attributes of the reply
QVariant statusCodeV=reply->attribute(
QNetworkRequest::HttpStatusCodeAttribute);
// Or the target URL if it was a redirect:
QVariant redirectionTargetUrl=reply->attribute(
QNetworkRequest::RedirectionTargetAttribute);
if(reply->error()==QNetworkReply::NoError){
//读取返回数据
QByteArray bytes=reply->readAll();
QString string =QString::fromUtf8(bytes);
qDebug()<<string;
}
}
四、程序运行
(1)运行界面
(2)启动本地geth节点(具体可看之前的博客)
geth --datadir "./" --networkid 989898 -rpc console --port 30304 --rpcport 8545 --rpccorsdomain "*" --ws --wsorigins="*" --wsaddr 0.0.0.0
(3)程序中填入url以及要post的数据
注意端口要与启动节点时的rpcport端口一致
url: http://127.0.01:8545
post的数据具体看需要什么,具体可参见利用RPS-JSON【post|get】与节点进行交互
本例要post的内容如下:
{"jsonrpc":"2.0","method":"eth_accounts","params":[],"id":1}
获取本节点下的账户
(4)点击post,查看返回
可以在代码编辑器QTcretor的控制台中看到返回如下
本例到此。