2011-07-11 13 views
5

私はBoost Asioを使用してHTTPクライアントを作成しようとしています。同期クライアントのサンプルをasioからコピーしてコンパイルしてから実行しました。残念ながら、私のログには、Service not foundが表示されます。私は、コードをトレースしたとき、私は、それが次のコードからスローされていること、それを見つけた:Boost Asio tcp :: resolver:サービスが見つかりません

boost::asio::io_service io_service; 
// Get a list of endpoints corresponding to the server name. 
tcp::resolver resolver(io_service); 
//->if i removed the http, it has no error 
tcp::resolver::query query("host.com", "http"); 
//->This part throws the service not found 
tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); 
tcp::resolver::iterator end; 

それが見つからないサービスを投げたりどのように私はこの問題を解決することができますにされた理由を誰も説明できますか?

答えて

6

これは、OSが、「http」という名前のTCPサービスに対応するポート番号を認識しないことを意味します。

UNIX系OSの場合、これは/etc/servicesから行http 80/tcpが見つからないことを意味します。この行をコメントアウトすることで、Linuxでエラーを再現できます。

OSがサービスを使用するように設定することができない場合は、リゾルバで任意のサービス""を使用し、接続コールのエンドポイントオブジェクトを作成するときにポート番号を明示的に指定することがあります。あなたの応答のための

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80); 
boost::system::error_code ec; 
socket.connect(connectionEndpoint, ec); 
+0

感謝。私が仕事に戻るときにこれを試してみる。ありがとう。 – neztreh

+2

また、ポート番号を文字列で指定することもできます。クエリ(「host.com」、「80」) –

関連する問題