0

あいまいな問題があります。2 人のユーザー間にマルチキャスト グループがあり、そのうちの 1 人は送信者であり、もう 1 人は受信者です。それぞれの側でこれらのシナリオを実行しました。

レシーバー:

  1. udp ソケットを作成します。
  2. マルチキャスト グループ アドレスにバインドする
  3. 送信側に接続します ( connect(sender ip))
  4. マルチキャスト グループに参加する
  5. マルチキャスト グループからの受信。

送信者:

  1. udp ソケットを作成します。
  2. マルチキャスト グループに送信します。

上記のシナリオでは、送信側がデータを送信したときに受信側が受信できませんでしたが、受信側を tcpdump で確認すると、マルチキャスト グループからデータが受信されていました。ただし、受信側に送信側への接続がない場合、データは受信されます。

しかし、実際には、マルチキャストグループに送信する前に送信者をマルチキャストアドレスにバインドし、上記のシナリオとして受信者を送信者側に接続させると、データは正常に受信されます!!!! 送信者側でバインドを追加したときの説明はありますか???

4

3 に答える 3

2

connect(2)送信を高速化するために送信者のソケットをマルチキャスト グループに接続したい場合がありますがconnect(2)、受信者はユニキャストに制限されるため、そうしないでください (はい、少し混乱しますが、それが機能する方法です)。受信bind(2)者のみをグループ/ポートに接続し、setsockopt(2)withIP_ADD_MEMBERSHIPを実行してグループに参加します。

于 2012-10-22T14:25:06.727 に答える
0

「接続されたUDPマルチキャスト」のようなものはありません。接続されているか、マルチキャストです。connect()ステップを完全に削除します。

于 2012-10-23T06:28:26.363 に答える
0

受信側では、bind() 呼び出しと connect() 呼び出しの両方が同じことを行います。これらは、指定されたインターネット ソケット アドレスを指定されたコネクションレス ソケットに関連付けます。bind()インターネット ソケット アドレスがマルチキャスト グループのアドレスである呼び出しの場合、これは、宛先アドレスがマルチキャスト グループのアドレスである UDP パケットのみをソケットが受信することを意味します。インターネットソケットアドレスが送信者のものである呼び出しの場合、connect()これは、ソケットが宛先アドレスが送信者のものであるUDPパケットのみを受信することを意味しますが、これはあなたが望むものではありません.

connect()呼び出しが呼び出しをオーバーライドしているため、bind()パケットが受信されません。

通話をマルチキャスト グループへのbind()通話に置き換えると、引き続き UDP パケットを受信するか、通話のみを保持する必要があります。君に電話だ。connect()bind()

于 2015-01-05T20:47:45.723 に答える