SSDPメッセージを送受信する必要があるUPnP AV / DLNA DMSを作成しています。いくつかのパケットに応答して、リソース (この場合は HTTP サーバー) の URL を含む応答を送信する必要があります。もちろん、このアドレスはパケットの送信者には意味がありません。パケットを受信したインターフェイスのアドレスが最も適切です。M-SEARCH
INADDR_ANY
0.0.0.0
M-SEARCH
M-SEARCH
応答パケットで送信する適切なアドレスを特定するにはどうすればよいですか?
私が検討したいくつかのアイデアは次のとおりです。
- 各ソケットに異なるレシーバーをバインドします。受信者が
M-SEARCH
パケットを受信すると、応答アドレスは応答でソケットのローカル アドレスを使用できます。ただし、これには、すべてのインターフェイスを把握して反復し、インターフェイスの可用性の変化に応じてレシーバーを追加および削除する必要があります。 - に 1 つのレシーバを配置し
INADDR_ANY
、インターフェイスのネットマスクを反復して、考えられるソースを特定します。ただし、複数のインターフェースが同じサブネットを共有する場合があります。 - 受信時にパケットの IP ターゲット アドレスを抽出します。これは IP 固有のものであり、ネットワークの抽象化のどこかで失われる可能性があります。