`
zhangyafei_kimi
  • 浏览: 261695 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

用asio的定时器实现带超时的connect,备忘

阅读更多
// test.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <boost/asio.hpp>
#include <boost/bind.hpp>
#include <boost/date_time/posix_time/posix_time_types.hpp>
#include <iostream>

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

class connect_handler
{
public:
	connect_handler(io_service& ios)
		: io_service_(ios),
		timer_(ios),
		socket_(ios)
	{
		socket_.async_connect(
			tcp::endpoint(boost::asio::ip::address_v4::loopback(), 3212),
			boost::bind(&connect_handler::handle_connect, this,
			boost::asio::placeholders::error));

		timer_.expires_from_now(boost::posix_time::seconds(5));
		timer_.async_wait(boost::bind(&connect_handler::close, this));
	}

	void handle_connect(const boost::system::error_code& err)
	{
		if (err)
		{
			std::cout << "Connect error: " << err.message() << "\n";
		}
		else
		{
			std::cout << "Successful connection\n";
		}
	}

	void close()
	{
		socket_.close();
	}

private:
	io_service& io_service_;
	deadline_timer timer_;
	tcp::socket socket_;
};

int main()
{
	try
	{
		io_service ios;
		tcp::acceptor a(ios, tcp::endpoint(tcp::v4(), 32123), 1);

		// Make lots of connections so that at least some of them will block.
		connect_handler ch1(ios);
		//connect_handler ch2(ios);
		//connect_handler ch3(ios);
		//connect_handler ch4(ios);
		//connect_handler ch5(ios);
		//connect_handler ch6(ios);
		//connect_handler ch7(ios);
		//connect_handler ch8(ios);
		//connect_handler ch9(ios);

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

	return 0;
}
分享到:
评论

相关推荐

    用asio自封装负载均衡网络库、定时器、线程池

    用boost库asio网络库的全面封装,包含网络通信,负载均衡,线程池调度,定时器调度,能用于服务器和客户端开发,给出的代码中包含服务器及客户端

    TCP_server___client_ASIO异步实现服务器代码_

    通过BOOST.ASIO实现Socket Server

    boost asio tcp服务器的实现

    boost::asio tcp服务器的实现 封装socket, 监听socket, C++11智能指针, 要求: vs2012或以上版本

    C++ asio库实现的简单web server

    C++ asio实现的简单web server。

    boost::asio::serialport实现串口通信

    通过boost::asio::serialport类实现串口通信的例子

    简化版asio,只实现了win iocp,主要代码仅千行

    最近一个windows的项目(手游服务器)中不允许使用boost,这让长期用boost::asio搞linux服务程序开发的我很不适应,于是抽了一周的时间研究了boost::asio的IOCP实现,并实现了一个简化版,主要代码仅千行,正好能用于...

    串口通信-asio实现

    串口通信-asio实现

    Qt中独立Asio高性能网络异步库的使用实例

    Qt中独立Asio高性能网络异步库的使用实例。本次介绍的都是Asio独立运行库。Boost.Asio的作者也保持了Asio。你可以用Asio的方式来思考,因为它在两种情况中都有:Asio(非Boost的)和Boost.Asio

    LabVIEW调用ASIO声卡驱动

    LabVIEW调用ASIO声卡驱动,控制ASIO声卡播放录音。

    ASIO声卡录音程序

    自动识别当前ASIO驱动,可选择不同声卡录音,最大支持10通道的ASIO声卡录音,可选择录音通道数,录音文件保存在当前目录,格式为wav格式,win7下亲测使用正常

    asio客户/服务器聊天程序

    一个基本的聊天程序,基于Asio实现,相信知道Boost的人都很清楚Asio这个东西 想学习C++网络编程的可以看看,很基础的东西

    C++ 之 Asio 库(全面解析)

    2 使用 Asio 2.1 下载 Asio 库分为 Boost 版和 non-Boost 版,后者的下载地址为: http://think-async.com/ ,下载完成后,直接解压到合适位置即可。 2.2 配置 INCLUDEPATH += $$PWD/../../serialport/asio-1.10.8...

    ASIO4ALL2.10

    ASIO4ALL是ASIO驱动的平民版。是由Wuschel开发出来的一款绿色小巧的 ASIO 驱动,声称能使几乎所有的声卡以及 AC97板载声卡都能支持 ASIO,达到专业音频卡才能达到的低延迟。适用于几乎所有的声卡以及板载AC97声卡,...

    c++ boost asio http get post请求

    利用Boost::Asio库来实现Post/Get请求的发送。可以快速开发c++的http请求,访问以http为协议的服务器示例代码。

    tcp server boost asio

    基于boost的asio封装的高性能TCP服务器。asio已经有很好的事件封装机制,只有底层事件,没有针对TCP建立会话机制;也没有多多包进行合包,已包为单位的事件提交机制。由于以上多种原因,决定对boost库进行更高的抽象...

    Steinberg’s ASIO SDK 2.3

    ASIO 是优秀的音频驱动,使用这款驱动可以获得极低的时间延迟。 Changes in ASIO 2.3 since ASIO 2.2 - added host queries to detect the driver's buffering and drop-out detection capabilities - some ...

    asio4all文件

    ASIO的全称是Audio Stream Input Output,直接翻译过来就是音频流输入输出接口的意思,ASIO完全摆脱了Windows操作系统对硬件的集中控制,它能实现在音频处理软件与硬件之间进行多通道传输的同时,将系统对音频流的...

    Boost ASIO C++ 网络编程 中文版 带全书所有例子代码

    Boost.Asio C++ Network Programming 书的翻译 此版本的书无目录失效BUG 并且带全书源代码 方便学习使用

    st_asio_wrapper一组boost.asio包装类(1.6版)

    当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改...

    boost库的asio负载均衡网络库和定时器以及线程池的全面封装库

    我的原创,对boost库asio网络库的全面封装,包含网络通信,负载均衡,线程池调度,定时器调度,能用于服务器和客户端开发,给出的代码中包含一个Loop back ping pong服务器以及客户端

Global site tag (gtag.js) - Google Analytics