2009-02-23 75 views
5

对于我来说,boost.asio在客户端应用连接到服务器时并不使用基本概念 - 使用IP地址和端口。可能是我在Boost中有一点点noobie - 我接受 - 但无论如何我不明白。
所以,我有这样的代码来获取客户端连接到服务器上的本地主机:boost.asio如何发现我的服务器应用程序监听哪个端口?


     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); 
     } 

的Windows在它的WinSock 2.0使用两个参数 - IP和端口 - 识别服务器。
所以,qurestion是 - Asio如何发现哪个端口服务器正在监听连接?它是否扫描所有端口?而且,如果是这样,如果两台服务器同时监听不同的端口会发生什么?

回答

5

您正在告诉它您想要连接到白天服务使用的端口上的本地主机。它将在服务文件中查找适当的端口号(通常是Windows下的C:\ WINDOWS \ system32 \ drivers \ etc \ services,我相信Unix下的/ etc/services)。你也可以在那里使用一个明确的端口号。

+0

我没有完全理解第二个参数在查询ctor中的含义。第一个是我想连接的IP地址,对吧?第二个是什么意思? – chester89 2009-02-23 18:53:00

8

尝试,

tcp::resolver::query query("localhost", boost::lexical_cast<string>(port));//assuming port is an int 

要回答你的问题,记得,你开始在端口13服务器这恰好是它运行在Linux日间服务(http://www.sorgonet.com/linux/linuxdaemons/)的端口。因此,他们随后可以使用查询(“localhost”,“daytime”)而不是指定端口。

0

打开netcat监听本地主机上的端口它将接受演示的连接。键入一些布拉布拉当它连接,你会看到的演示程序 运行netcat的输出,运行: NC -l -p 13

窗口?没有netcat?安装cygwin,并添加netcat

相关问题