当我连接到服务器的客户端应用程序 - 使用IP地址和端口时,boost.asio不使用基本概念,这有点奇怪.可能是我在Boost中有点诺贝 - 我接受了 - 但无论如何我不明白.
所以,我有这样的代码让客户端连接到localhost上的服务器:
boost::asio::io_service io_service; tcp::resolver resolver(io_service); tcp::resolver::query query("localhost", "daytime"); tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); tcp::resolver::iterator end; tcp::socket socket(io_service); boost::system::error_code error = boost::asio::error::host_not_found; while(error && endpoint_iterator != end) { socket.close(); socket.connect(*endpoint_iterator++, error); }
WinSock 2.0中的Windows使用两个参数 - IP和端口 - 来标识服务器.
因此,问题是 - Asio究竟如何找出服务器正在监听连接的端口?它扫描所有端口吗?而且,如果是这样,如果两个服务器同时在不同的端口上侦听会发生什么?
尝试,
tcp::resolver::query query("localhost", boost::lexical_cast(port));//assuming port is an int
要回答您的问题,请回想一下您是在端口13上启动服务器.这恰好是运行Linux日间服务的端口(http://www.sorgonet.com/linux/linuxdaemons/).因此,他们随后能够使用查询("localhost","daytime")而不是指定端口.
您告诉它您要在日间服务使用的端口上连接到localhost.它会在服务文件中查找相应的端口号(通常是Windows下的C:\ WINDOWS\system32\drivers\etc\services,我相信Unix下的/ etc/services).您也可以在那里使用显式端口号.