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];
    };
  • 相关阅读:
    【转】C#字符串替换_无视大小写
    如何安装inf文件
    IDisposable模式
    VS2005 模板的制作方法
    ASP.NET Client Side State Management
    微软提供正确卸载IE7的方法并恢复IE6!!!!
    Access JavaScript variables on PostBack using ASP.NET Code
    Windows Mobile 5.0 SDK R2 for Pocket PC安装错误解决方案
    Oracle日期函数与应用
    XP下安装IIS6.0的办法
  • 原文地址:https://www.cnblogs.com/kenter/p/2097647.html
Copyright © 2011-2022 走看看