私はピアがプライベートIPとパブリックIPに情報を伝えるためにサーバーと話すP2Pアプリケーションを開発しています。アプリケーションは通信にUDPを使用します。P2PアプリケーションでのローカルIPアドレスの決定
プライベートIPを取得するには、クライアントはgethostbyname
を使用して、そのIPにバインドします。問題は、システムに複数のNICがある場合です。問題は、NICの1つがインターネットに接続されていない場合です。だから私はそれを避けるためにINADDR_ANY
を使用しています。
これでサーバに通知するために自分のローカルIPアドレスを取得する必要があります。 NICのどのIPアドレスがアクティブであるかを教えてくれるAPIはありますか?
特定のIPを使用してバインドすることはできません。なぜなら、どのIPがアクティブかわからないからです。それで、私はINADDR_ANYを使ってバインドするので、到着したパケットは適切に配信されます。 – Jeeva
だからこそ、私はあなたがすべてのインターフェースを繰り返し、それぞれにバインドすることをお勧めします。追加される新しいインターフェースなども処理したい場合は、インターフェースの変更もリッスンする必要があります。 'INADDR_ANY'にバインドすると' getsockname() 'は常にソケットがバインドされているものと同じように' INADDR_ANY'を返します。 –
私はすべてのアドレスにバインドする場合データを送信するために使用しているIPをどのように決定するのですか?サーバーにクライアントのプライベートIPを決定する方法はありません – Jeeva