以太坊学习(8)编写C++程序与以太坊节点进行交互【1】

编写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_OBJECT

public:
    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的控制台中看到返回如下

本例到此。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值