我是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();
}
有人可以对此嗤之以鼻吗?
答案 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()
在某个线程中运行,否则将不会执行异步调用(和相关的回调)。