zoukankan      html  css  js  c++  java
  • 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, 
    0sizeof(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];
    };
  • 相关阅读:
    [计算机视觉]算法
    [python]python中**是什么
    ubuntu16.04增大swap空间
    conda查看某个安装包的依赖项
    conda install -c anaconda
    conda安装指定版本的指定包
    ValueError: Unable to determine SOCKS version from socks://127.0.0.1:1080/
    [ubuntu]卸载老版并安装最新版firefox
    使用anaconda创建tensorflow环境后如何在jupyter notebook中使用
    [python]numpy.mean()用法
  • 原文地址:https://www.cnblogs.com/kenter/p/2097647.html
Copyright © 2011-2022 走看看