asio客户端心得

#pragma  once

#include 
< boost / asio.hpp >
#include 
< boost / bind.hpp >
#include 
< boost / shared_ptr.hpp >
using  boost::asio::ip::tcp;

class  CAsioClient
{
public :
    CAsioClient(boost::asio::io_service
&  io_service,tcp::endpoint &  endpoint)
        : socket(io_service)
    {
        socket.async_connect(endpoint,
            boost::bind(
& CAsioClient::handle_connect, this ,boost::asio::placeholders::error)
            );
        memset(getBuffer, 
0 sizeof (getBuffer));
    }

    
virtual   ~ CAsioClient( void )
    {
        
if  (sendBuffer  !=  NULL)
        {
            delete sendBuffer;
        }
    }

private :
    
void  handle_connect( const  boost::system::error_code &  error)
    {
        
if ( ! error)
        {
            sendBuffer 
=   new  BYTE[ 2 ];
            sendBuffer[
0 =   0x68 ;
            sendBuffer[
1 =   0x16 ;
            boost::asio::async_write(socket,boost::asio::buffer(sendBuffer, 
sizeof (sendBuffer)),
                boost::bind(
& CAsioClient::handle_write, this ,boost::asio::placeholders::error));

            socket.async_read_some(boost::asio::buffer(getBuffer, 
sizeof (getBuffer)),
                boost::bind(
& CAsioClient::handle_read, this ,boost::asio::placeholders::error)
                );

        }
        
else
        {
            socket.close();
        }
    }
    
void  handle_read( const  boost::system::error_code &  error)
    {
        
if ( ! error)
        {
            socket.async_read_some(
                boost::asio::buffer(getBuffer, 
sizeof (getBuffer)),
                boost::bind(
& CAsioClient::handle_read, this ,boost::asio::placeholders::error)
                );
        }
        
else
        {
            socket.close();
        }
    }

    
void  handle_write( const  boost::system::error_code &  error)
    {
        
if  ( ! error)
        {
            Sleep(
1000 );
            sendBuffer 
=   new  BYTE[ 2 ];
            sendBuffer[
0 =   0x68 ;
            sendBuffer[
1 =   0x16 ;
            boost::asio::async_write(socket,boost::asio::buffer(sendBuffer, 
sizeof (sendBuffer)),
                boost::bind(
& CAsioClient::handle_write, this ,boost::asio::placeholders::error));
        }
    }

private :
    tcp::socket socket;
    BYTE 
* sendBuffer;
    BYTE getBuffer[
1024 ];
};

转载于:https://www.cnblogs.com/kenter/archive/2011/07/04/2097647.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ASIO 是一个通用的异步网络库,可以帮助您编写 HTTP 客户端。下面是一个简单的代码示例,演示了如何使用 ASIO 发送一个 HTTPS 请求: ``` #include <iostream> #include <boost/asio.hpp> #include <boost/asio/ssl.hpp> int main() { boost::asio::io_context ioc; boost::asio::ssl::context ctx(boost::asio::ssl::context::tlsv12_client); ctx.set_verify_mode(boost::asio::ssl::verify_peer); boost::asio::ssl::stream<boost::asio::ip::tcp::socket> socket(ioc, ctx); boost::asio::connect(socket.lowest_layer(), boost::asio::ip::tcp::resolver(ioc).resolve("www.example.com", "https")); socket.handshake(boost::asio::ssl::stream_base::handshake_type::client); boost::asio::streambuf request; std::ostream request_stream(&request); request_stream << "GET / HTTP/1.0\r\n"; request_stream << "Host: www.example.com\r\n"; request_stream << "Accept: */*\r\n"; request_stream << "Connection: close\r\n\r\n"; boost::asio::write(socket, request); boost::asio::streambuf response; boost::asio::read(socket, response); std::cout << &response; return 0; } ``` 这是一个非常基础的代码示例,可以帮助您快速了解如何使用 ASIO 编写 HTTPS 客户端。如果您想要更多信息,可以参考 ASIO 官方文档。 ### 回答2: asio是一个C++网络编程库,易于使用、高效、跨平台,可以用来编写各种类型的网络应用程序,包括HTTPS客户端。 在使用asio编写HTTPS客户端时,需要经历以下几个步骤: 1. 创建一个asio的io_service对象,用于驱动其它的asio组件。 2. 创建一个ssl::context对象,用于配置SSL/TLS连接的参数,比如证书验证、安全选项等。 3. 创建一个ssl::stream对象,用于建立与服务器的SSL/TLS连接。 4. 使用asio提供的ip::tcp::resolver对象来解析主机名和服务,并得到服务器的IP地址和端口号。 5. 使用connect()函数连接服务器。 6. 使用async_handshake()函数进行SSL/TLS握手。 7. 发送HTTPS请求,可以使用asio提供的io_service对象或者ssl::stream对象进行网络通信。 8. 接收服务器的响应,可以使用asio提供的流读取操作,比如async_read()。 9. 处理服务器的响应数据,根据需要进行解析、处理或展示。 10. 使用shutdown()函数结束SSL/TLS连接。 11. 关闭asio的io_service对象,释放资源。 总结来说,使用asio编写HTTPS客户端需要配置SSL/TLS连接的参数、建立连接、进行SSL/TLS握手、发送请求、接收响应以及结束连接。通过使用asio提供的各种功能函数,能够方便地实现一个功能齐全的HTTPS客户端
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值