关闭

boost::asio脱离boost独立编译(windows)

295人阅读 评论(0) 收藏 举报
分类:

boost.asio强大的开源异步网络库,随着c++11的诞生,代码对boost的依赖已经逐步减少,因为boost的依赖库太过庞大, boost的很多优秀的模块都

已经加入到c++11,如智能指针,auto,bind,智能锁,线程等等..

废话不多说了,asio的官网已经说明可以脱离boost独立编译了, 但只是简单的介绍了linux下的脱离编译,下面进入正题:

//1.在工程属性"c++/预处理器/预处理器定义"中加入下面两个宏定义
_WIN32_WINNT 0x0A00 //声明操作系统为WIN10
ASIO_STANDALONE	//独立使用asio

//2.设置工程属性"常规/字符集"设置为使用多字节字符集

//3.将asio源码拷贝到指定目录,并在工程属性包含这个路径



现在我们简单的写个demo测试一下(demo是网上随便找的例子改写一下测试可用性)

#include "stdafx.h"
#include "asio.hpp"
#include <iostream>
using namespace std;
using namespace asio;
using asio::ip::tcp;
#include<functional>

class myasio
{
public:
	myasio()
		:m_acc(m_iosvr, tcp::endpoint(tcp::v4(), 1986))
	{

	}
	~myasio()
	{

	}

public:
	int start()
	{
		std::shared_ptr<tcp::socket> psock(new tcp::socket(m_iosvr));
		m_acc.async_accept(*psock, [&](asio::error_code err) {
			if (err)
			{
				return;
			}
			start();
			std::cout << psock->remote_endpoint().address() << std::endl;
			time_t now = time(0);
			std::string msg = ctime(&now);
			asio::error_code igerr;
			psock->write_some(asio::buffer(msg), igerr);
		});
		m_iosvr.run();
		return 0;
	}
protected:
	void accept_handler(std::shared_ptr<tcp::socket> ps, asio::error_code err)
	{
		if (err)
		{
			return;
		}
		start();

		std::cout << ps->remote_endpoint().address() << std::endl;

		time_t now = time(0);
		std::string msg = ctime(&now);
		asio::error_code igerr;
		ps->write_some(asio::buffer(msg), igerr);
	}
private:
	io_service		m_iosvr;
	tcp::acceptor		m_acc;
};


int main()
{
    myasio asio;
    asio.start();

    return 0;
}

在vs2010和vs2017下都编译通过(以上测试demo是在vs2017下编译)



   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:508次
    • 积分:54
    • 等级:
    • 排名:千里之外
    • 原创:2篇
    • 转载:0篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档