3

次の接続をセットアップしましたが、これは正しく機能します。これは、着信メッセージを (空いているポートで) リッスンする大きなコードの一部です。私がやろうとしているのは、URI を公開して、他のクライアントがこれに接続できるようにすることです。ただし、「localhost」ではなく、使用されているインターフェイスの実際の IP アドレスとして endpoint.address() を表示する方法がわかりません。何か案は?

 tcp::resolver::query query(address, "");
 tcp:: endpoint endpoint = *resolver.resolve(query);
 acc.open(endp.protocol());
 acc.set_option(reuse_address(true));
 acc.bind(endp);
 acc.listen();

 tcp::endpoint endpoint =  acc.local_endpoint() ; 
 string uri = "tcp://" + endpoint.address().to_string() + ":" + lexical_cast<string>(endpoint.port()) ; 
4

1 に答える 1

2

Boost ASIO には、コンピューターのすべてのインターフェイスを列挙する方法はありません。リゾルバーは DNS に IP を問い合わせますが、設定したものは何でも返すことができるため、魔女は同じではありません (不正確な情報を取得することもできます)。

デフォルトのインターフェースにバインドしたい場合。解決する必要はありません。次のエンドポイントでソケットを作成するだけです:

 boost::asio::ip::tcp::endpoint endpoint = 
      boost::asio::ip::tcp::endpoint(boost::asio::ip::tcp::v4(),port);
于 2012-12-10T13:27:06.157 に答える