boost::asio tcp socket 的使用示例

6 篇文章 0 订阅
5 篇文章 0 订阅

// ThreadTest.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include "boost/thread.hpp"
#include "boost/shared_ptr.hpp"
#include "boost/asio.hpp"
#include "boost/bind.hpp"
#include <thread>
#include <windows.h>

typedef boost::shared_ptr<boost::asio::io_service> __io_service;
typedef boost::shared_ptr<boost::asio::ip::tcp::acceptor> __acceper;
typedef boost::asio::ip::tcp::endpoint __tcp_ep;
typedef boost::asio::ip::address_v4 __boost_addr_v4;
typedef boost::asio::ip::tcp::socket __tcp_skt;

__io_service _g_io_svr;
__acceper _g_acpter;

int PostAccept(int cnt = 1);



int WorkThread(int threadCont = 4)
{
	if (!_g_io_svr){
		return -1;
	}

	auto func = []()
	{
		printf("thread launched...\n");

		boost::system::error_code ec;
		_g_io_svr->run(ec);

		if (ec != 0){
			printf("io_service quit error.\n");
			return;
		}
	};

	for (size_t i = 0; i < (size_t)threadCont; i++)
	{
		boost::thread th(func);
	}

	return 0;
}


int Init(int threadCont = 4)
{
	if (!_g_io_svr){
		_g_io_svr = __io_service(new boost::asio::io_service(threadCont));

		if (!_g_io_svr){
			return -1;
		}
	}

	if (!_g_io_svr){
		return -1;
	}

	__tcp_ep ep(__boost_addr_v4::from_string("192.168.1.78"), 8888);
	_g_acpter = __acceper(new boost::asio::ip::tcp::acceptor(*_g_io_svr, ep, true));

	if (!_g_acpter){
		return -1;
	}

	if (PostAccept()){
		return -1;
	}


	return WorkThread(threadCont);
}

int _g_cnt = 0;
void AcceptHandler(__tcp_skt* socket, boost::system::error_code error)
{
	PostAccept();

	socket->close();
	delete socket;

	printf("%3d  socket connect...\n", ++_g_cnt);
}

int PostAccept(int cnt)
{
	__tcp_skt* skt = new(std::nothrow) __tcp_skt(*_g_io_svr);
	if (!skt){
		return -1;
	}

	_g_acpter->async_accept(*skt,
		boost::bind(AcceptHandler, skt, _1));

	return 0;
}


int _tmain(int argc, _TCHAR* argv[])
{
	if (Init() != 0){
		printf("init failed.\n");
	}

	printf("server run!.\n");

	system("pause");
	return 0;
}






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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值