使用Boost Asio库打开多个端口

时间:2012-02-23 19:14:25

标签: c++ boost boost-asio

我是Boost Asio库的新手,我的要求是构建一个服务器,它应该异步监听600个不同的端口(TCP通信)。有人可以建议我使用Boost Asio实现这一目标。我尝试过使用Boost Asio文档中提供的echo服务器示例,但实际上并不太了解       boost :: asio :: io_service io_service;

using namespace std; // For atoi.
for(long port=50000;port<=50600;port++)
{
    server s(io_service, port);
    io_service.run();
}

有人可以对此嗤之以鼻吗?

2 个答案:

答案 0 :(得分:5)

io_service负责处理分配给它的所有I / O;您不需要为每个端口创建单独的一个。对于您要执行的操作,您需要创建600个单独的服务器实例,然后调用io_service.run()

vector<shared_ptr<server> > servers;
for (uint16_t port = 50000; port != 50600; ++port)
{
    servers.push_back(shared_ptr<server>(new server(io_service, port)));
}
io_service.run();

答案 1 :(得分:0)

尝试一下这个

的内容
boost::asio::ip::tcp::socket socket(io_service);

socket.async_connect(endpoint, connectHandler);

socket变量是单个套接字的实例,对async_connect的调用会建立到endpoint定义的位置的异步连接。您可以以类似的方式执行异步读取和写入socket,只需确保io_service.run()在某个线程中运行,否则将不会执行异步调用(和相关的回调)。