2009-02-23 82 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

相關問題