2

Linux (C) アプリから呼び出して、マルチキャスト UDP を使用して、たまたまネットワークでリッスンしているすべての人に単純なログ メッセージを送信できるライブラリの推奨事項はありますか?

4

2 に答える 2

2

マルチキャストパケットを送信するためにライブラリは必要ありません。UDPメッセージをマルチキャストソケットに送信することは、ユニキャストアドレスに送信するよりもわずかに複雑です。

特に、を使用してパケットsetsockoptを設定する必要があります。IP_MULTICAST_TTL

受信側は少し難しいです-送信されたメッセージを受信できるようにするには、setsockoptwithを使用して特定のマルチキャストグループに参加する必要があります。IP_ADD_MEMBERSHIP

これらのオプションはすべてに記載されていman 7 ipます。

于 2012-08-15T11:38:53.400 に答える
0

あなたが「ライブラリの推奨事項」を尋ねたように、誰かがCライブラリをC開発に推奨するかどうかを尋ねる人を見たことがないので、標準のCライブラリだけは必要ないと思います。したがって、明らかにCライブラリ以上のものは必要ありませんが、私の答えはあなたの質問に完全に適合するか、おそらく質問はあまり良くありません。

優れた ZeroMQ および EPGM プロトコル (UDP 内にカプセル化) を使用できます。

zmq_pgm - PGM を使用した ØMQ の信頼できるマルチキャスト トランスポート

サーバー側で

void *context = zmq_init(1);
assert(context);
void *broadcast = zmq_socket(context, ZMQ_PUB);
assert(broadcast);
rc = zmq_bind(broadcast, "epgm://192.168.0.123:5555");
assert(rc==0);
rc = s_send(broadcast, "Hello world!");
assert(rc==0);

クライアント側で:

void *context = zmq_init(1);
assert(context);
void *watch = zmq_socket(context, ZMQ_SUB);
assert(watch);    
rc = zmq_connect(watch, "epgm://192.168.0.123:5555");
assert(rc==0);
char *message = s_receive(watch);
assert(message);
于 2012-08-15T10:17:45.410 に答える