Boost库-asio-异步客户端与服务端

 客户端类定义文件 ClientAsync.hpp

#ifndef __Client_Async_hpp__
#define __Client_Async_hpp__

#include<iostream>
#include<boost\asio.hpp>
#include<boost\bind.hpp>

class ClientAsync
{
	typedef ClientAsync this_type;
	typedef boost::asio::ip::tcp::endpoint endpoint_type;
	typedef boost::asio::ip::address address_type;
	typedef boost::asio::ip::tcp::socket socket_type;
	typedef boost::asio::io_service io_service_type;
	typedef boost::shared_ptr<socket_type> sock_ptr;
	typedef std::vector<char> buffer_type;
private:
	io_service_type m_io;
	buffer_type m_buf;
	endpoint_type m_ept;
public:
	ClientAsync() :m_buf(100, 0),
		m_ept(address_type::from_string("127.0.0.1"), 4567)
	{
		Start( );
	}
	void Run( )
	{
		m_io.run( );
	}

	void Start()
	{
		sock_ptr sock(new socket_type(m_io));

		sock->async_connect(m_ept,
			boost::bind(&this_type::Connect_Handler,this,
				boost::asio::placeholders::error,sock)
		);
	}
	void Connect_Handler(const boost::system::error_code &ec,sock_ptr sock)
	{
		if (ec)
		{ return;}

		std::cout << "recive from" << sock->remote_endpoint().address();

		sock->async_read_some(boost::asio::buffer(m_buf),
			boost::bind(&this_type::Read_Handler,
				this,boost::asio::placeholders::error)
		);
	}

	void Read_Handler(const boost::system::error_code &ec)
	{
		if (ec)
			return;
		std::cout << &m_buf[0] << std::endl;
	}
};



#endif // !__Client_Async_hpp__

客户端的主函数文件:

#include"ClientAsync.hpp"

int main(int argc, char** argv)
{
	try {
		std::cout << "client start..." << std::endl;
		ClientAsync client;
		client.Run( );
	}
	catch(std::exception except){
		std::cout << except.what() << std::endl;
	}

	getchar();
}

服务端类定义文件 ServerAsync.hpp

#ifndef __Server_Async_hpp__
#define __Server_Async_hpp__

#include<boost\asio.hpp>
#include<boost\bind.hpp>

class ServerAsync
{
	typedef ServerAsync this_type;
	typedef boost::asio::ip::tcp::acceptor acceptor_type;
	typedef boost::asio::ip::tcp::endpoint endpoint_type;
	typedef boost::asio::ip::tcp::socket socket_type;
	typedef boost::asio::io_service io_service_type;
	typedef boost::shared_ptr<socket_type> sock_ptr;
private:
	io_service_type m_io;
	acceptor_type m_acceptor;
public:
	ServerAsync() : m_acceptor(m_io,
		endpoint_type(boost::asio::ip::tcp::v4(), 4567)
	                            )
	{
		Accept( );
	}
	void Run()
	{ 
		m_io.run( );
	}
	void Accept()
	{
		sock_ptr sock(new socket_type(m_io));
		m_acceptor.async_accept(
			*sock,
			boost::bind(&this_type::Accept_Handler, this, boost::asio::placeholders::error, sock)
		);
	} 

	void Accept_Handler(const boost::system::error_code& ec, sock_ptr sock)
	{
		if (ec)
		{
			return;
		}
		std::cout << "client:" <<
			sock->remote_endpoint().address() << std::endl;

		sock->async_write_some(boost::asio::buffer("hello asio"),
			boost::bind(&this_type::Write_Handler, this, boost::asio::placeholders::error)
		);

		Accept();
	}

	void Write_Handler(const boost::system::error_code& ec)
	{
		std::cout << "send message success!" << std::endl;
	}



};



#endif

服务端主函数文件:

//#include<boost\asio.hpp>
#include<iostream>
#include"ServerAsync.hpp"
int main(int argc, char** argv)
{
	try
	{ 
		ServerAsync server;
		server.Run();
	}
	catch (std::exception except)
	{
		std::cout << except.what() << std::endl;
	}

	getchar();

	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

莫忘输赢

莫忘输赢 - 收钱袋

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值