7

Boost Asio を使用して HTTP クライアントを作成しようとしています。asio から同期クライアントの例をコピーし、コンパイルしてから実行しました。残念ながら、私のログでは、Service not found と表示されます。コードをトレースしたところ、次のコードからスローされていることがわかりました。

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;

なぜサービスが見つからないのか、またはこれをどのように解決できるのかを誰かが説明できますか?

4

1 に答える 1

11

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

Unix ライクな OS では、これは行http 80/tcpが から欠落していることを意味/etc/servicesします。その行をコメントアウトすることで、Linux でエラーを再現できます。

サービスを使用するように OS を構成できない場合は""、リゾルバーで任意のサービスを使用し、接続呼び出しのエンドポイント オブジェクトを作成するときにポート番号を明示的に指定できます。

tcp::endpoint connectionEndpoint(endpoint_iterator->address(), 80);
boost::system::error_code ec;
socket.connect(connectionEndpoint, ec);
于 2011-07-11T15:44:23.313 に答える