C++ を使用して、IPv4 アドレスとポートの両方を提供する単一の UDP ソケットを作成します。これを Ubuntu で実行し、wlan0 と eth0 の両方のインターフェイスを稼働させています。どうやら、両方のインターフェイスを使用する必要があると判断したようです。感謝しています。ただし、異なるインターフェイスを使用して送受信すると、一種のピクルス (NAT トラバーサル???) が作成されます。Wireshark を使用すると、入ってくるパッケージを確認できますが、アプリケーションはそれらを登録しません。
明確にするために:
ピアを提供してくれるトラッカーがあります。また、トラッカーはそのピアに連絡してメッセージを送信します。NAT トラバーサルの問題を解決するために、パンクチャ メッセージを送信します。問題は、パンクチャ メッセージが wlan 経由で送信されることです (2 台のマシンでローカルにテストしています) が、ピアからのメッセージは eth 経由で受信されます。
したがって、最も簡単な解決策は、単純に 1 つのインターフェイスを使用することだと思います。(または両方とも 1 つのソケット)
編集:
単一のインターフェースを指定することについて、ここで言及されていることを試してみます。
@Barmarは、sendtoがそれから恩恵を受ける宛先アドレスで呼び出されると、UDPソケットがインターフェースを変更する可能性があることを指摘しました。ただし、問題の理由についてはまだあいまいです。そもそもこれが問題である理由を誰かが説明できますか?
EDIT2:
ソケット バインド用に 1 つのインターフェイスを強制する上記の解決策は機能しませんでした。どうやら sendto メソッドはこれを無視することを選択し、他のインターフェイスの方がうまく機能すると思われる場合は引き続き使用します。ソケットが割り当てられたインターフェイスに固定されていることを確認する方法を知っている人はいますか?