C++类的写法构建,初始化

这是一个较为完善的写法示例如下:

//
// async_tcp_echo_server.cpp
// ~~~~~~~~~~~~~~~~~~~~~~~~~
//
// Copyright (c) 2003-2012 Christopher M. Kohlhoff (chris at kohlhoff dot com)
//
// Distributed under the Boost Software License, Version 1.0. (See accompanying
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
//

#include <cstdlib>
#include <iostream>
#include <boost/bind.hpp>
#include <boost/asio.hpp>

#define DEBUG_Time 0

using boost::asio::ip::tcp;
using namespace std ;


//namespace

namespace tcp_server
{
    /*
    // tcp write buffer
    */
    static std::string wrBuffer;
    /*
    // tcp read buffer

};

using namespace tcp_server ;

//class

class session
{
public:

//公共构建

  session(boost::asio::io_service& io_service)
    : socket_(io_service)
  {
        
  }

//外部引用

  tcp::socket& socket()
  {
    return socket_;
  }

  void start()
  {
    socket_.async_read_some(boost::asio::buffer(aa, 1024),
        boost::bind(&session::handle_read, this,
          boost::asio::placeholders::error,
          boost::asio::placeholders::bytes_transferred));
  }

private:
  void handle_read(const boost::system::error_code& error,
      size_t bytes_transferred)
  {
      if(!error)
      {
          cout<<aa<<endl;
          boost::asio::async_write(socket_,
              boost::asio::buffer(aa, tcp_server::wrBuffer.size()),
              boost::bind(&session::handle_write, this,
              boost::asio::placeholders::error));
      }
  }

  void handle_write(const boost::system::error_code& error)
  {
     if (!error)
    {
        memset(aa,' ',sizeof(aa));    
        socket_.async_read_some(boost::asio::buffer(aa, 1024),
          boost::bind(&session::handle_read, this,
            boost::asio::placeholders::error,
            boost::asio::placeholders::bytes_transferred));
    }
    else
    {
      delete this;
    }
  }

//class 的内部类和变量

  tcp::socket socket_;
  char aa[1024];
};

//Class—Server

class server
{
public:
  server(boost::asio::io_service& io_service)
    : io_service_(io_service),
      acceptor_(io_service, tcp::endpoint(tcp::v4(), 1000))
  {
    start_accept();
  }

private:
  void start_accept()
  {
    session* new_session = new session(io_service_);
    acceptor_.async_accept(new_session->socket(),
        boost::bind(&server::handle_accept, this, new_session,
          boost::asio::placeholders::error));
  }
  void handle_accept(session* new_session,
      const boost::system::error_code& error)
  {
    if (!error)
    {
      new_session->start();
    }
    else
    {
      delete new_session;
    }

    start_accept();
  }

//class server 的内部变量和内部类

  boost::asio::io_service& io_service_;
  tcp::acceptor acceptor_;
};

//main过程对他们的初始化

int main(int argc, char* argv[])
{
  try
  {

    boost::asio::io_service io_service;

    using namespace std; // For atoi.
    server s(io_service);

    io_service.run();
  }
  catch (std::exception& e)
  {
    std::cerr << "Exception: " << e.what() << "\n";
  }

  return 0;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值