0

マルチキャスト (udp) 送信側/受信側プログラムを稼働させています。setsockopt を使用して送信者とのループバックを有効にすると、次のようになります。

if(setsockopt(sockfd, IPPROTO_IP, IP_MULTICAST_LOOP, &loop, sizeof(loop)) < 0)
    error("loopback failed.");

その後、すべてのサブスクライバーにメッセージを送信します。送信者は、送信されたメッセージをどのように取得しますか? 送信者は自分の IP アドレスとポート番号を保存せず、自分自身にメッセージを送信しました (基本的には自分自身にサブスクライブします)。

したがって、次のようになります。

受信者 1 (サブスクリプション) -> 送信者

受信者 2 (サブスクリプション) -> 送信者

いつ送信するか:

送信者 (情報) -> 受信者1

送信者 (情報) -> 受信者2

送信者 (情報) -> 送信者? // このステップはどのように機能しますか?

助けてくれてありがとう :)

4

2 に答える 2

0

コードでloopは、タイプu_charは ではなくである必要がありますint。もちろん、これにより最終setsockopt()パラメータも値 1 に変更されます。私はこれについて個人的な経験はありませんが、W. Richard Stevens は UNIX Network Programming (3rd edition), Vol. 1、セクション21.6なので、そうでなければなりません。

int彼はまた、ここでの型の使用は一般的なプログラミング エラーであるとも述べています。

于 2011-04-21T04:20:59.373 に答える
0

ループバックを有効にする ( http://tldp.org/HOWTO/Multicast-HOWTO-6.html#ss6.1によると、実際にはデフォルトで有効になっている可能性があります) ことに加えて、マルチキャスト グループに加入する必要もあります。

各受信者にパケットの個別のコピーを送信する必要はありません。マルチキャスト サブスクリプションが正しく、マルチキャストをサポートするネットワーク上にいる場合は、1 回の送信で十分です。

于 2011-04-21T15:33:53.170 に答える