Qt_22 - 8BitsCoding/RobotMentor GitHub Wiki

get 버튼을 누를시 주소값을 ip로 받고 싶다.
// widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include "asioclient.h"
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots:
void on_getBtn_clicked();
private:
Ui::Widget *ui;
AsioClient * client;
};
#endif // WIDGET_H// widget.cpp
#include "widget.h"
#include "ui_widget.h"
#include "QString"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
, client(new AsioClient)
{
ui->setupUi(this);
ui->paramTable->setColumnCount(2);
ui->paramTable->setHorizontalHeaderLabels(QString("key;value").split(";"));
ui->paramTable->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->urlEdit->setText("http://127.0.0.1:5000/");
}
Widget::~Widget()
{
delete ui;
delete client;
}
void Widget::on_getBtn_clicked()
{
client->Get("www.boost.org","/");
}#ifndef ASIOCLIENT_H
#define ASIOCLIENT_H
#include <boost\asio.hpp>
#include <boost/bind.hpp>
#include <QObject>
#include <QString>
#include <memory>
#include <thread>
class AsioClient
{
public:
AsioClient();
virtual ~AsioClient();
void Get(const QString& url, const QString& path);
void handle_resolve(const boost::system::error_code& err,
boost::asio::ip::tcp::resolver::iterator endpoint_iterator);
private:
boost::asio::io_service ioservice;
std::shared_ptr<boost::asio::io_service::work> work;
std::thread worker;
std::string server, path;
boost::asio::ip::tcp::resolver resolver;
};
#endif // ASIOCLIENT_H#include "asioclient.h"
#include <qdebug.h>
AsioClient::AsioClient() :
work(new boost::asio::io_service::work(ioservice)),
resolver(ioservice)
{
worker = std::thread([&](){
ioservice.run();
});
}
AsioClient::~AsioClient(){
ioservice.stop();
worker.join();
work.reset();
}
void AsioClient::Get(const QString& url, const QString& p)
{
// 1. url -> ep resolve
server = url.toStdString();
path = p.toStdString();
boost::asio::ip::tcp::resolver::query query(server, "http");
resolver.async_resolve(query, boost::bind(&AsioClient::handle_resolve,
this, boost::asio::placeholders::error,
boost::asio::placeholders::iterator));
// 2. connect
// 3. send
// 4. recv
}
void AsioClient::handle_resolve(const boost::system::error_code& err, boost::asio::ip::tcp::resolver::iterator endpoint_iterator)
{
if(!err) {
boost::asio::ip::tcp::endpoint ep = *endpoint_iterator;
qDebug() << ep.address().to_string().c_str();
}
}