• 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];
    };
  • 相关阅读:
    mac安装protobuf2.4.1时报错./include/gtest/internal/gtest-port.h:428:10: fatal error: 'tr1/tuple' file not found和google/protobuf/message.cc:175:16: error: implicit instantiation of undefined template
    java基础六 [异常处理](阅读Head First Java记录)
    安装和使用iOS的包管理工具CocoaPods
    Node.js的知识点框架整理
    java基础五 [数字与静态](阅读Head First Java记录)
    java基础四 [构造器和垃圾回收](阅读Head First Java记录)
    Appium学习路-安装篇
    Dell笔记本Ubuntu无线网卡驱动安装
    Ubuntu系统使用命令禁用触摸板等输入设备
    linux(ubuntu) 查看系统设备信息
  • 原文地址:https://www.cnblogs.com/kenter/p/2097647.html
Copyright © 2020-2023  润新知