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];
    };
  • 相关阅读:
    界面演示
    监控其它进程
    cmd 里面运行git提示“不是内部或外部命令,也不是可运行的程序”的解决办法...
    CI框架与Thinkphp框架的一些区别
    php 设置error_reporting(0)和ini_set('display_errors', 0)之后,还是显示错误
    PHPStorm2017去掉函数参数提示
    Cad 首尾相连的线段连接成多段线
    利用C#进行AutoCAD的二次开发 颜色和样式
    修改SDE最大连接数
    利用C#进行AutoCAD的二次开发(三)(转自明经通道)
  • 原文地址:https://www.cnblogs.com/kenter/p/2097647.html
Copyright © 2011-2022 走看看