2

我可以从我的 Linux (C) 应用程序调用的库的任何建议,以使用多播 UDP 向碰巧在网络上监听的任何人发送简单的日志消息?

4

2 回答 2

2

您不需要库来发送多播数据包。将 UDP 消息发送到多播套接字仅比将 UDP 消息发送到单播地址稍微复杂一些。

特别是你需要用来setsockopt设置IP_MULTICAST_TTL你的数据包。

setsockopt接收方稍微困难一些——您必须使用with加入特定的多播组IP_ADD_MEMBERSHIP才能接收发送给它的消息。

这些选项都记录在man 7 ip.

于 2012-08-15T11:38:53.400 回答
0

当您问“任何库的推荐”时,我认为您不想要标准 c 库,因为我从未见过有人问是否有人向 c 开发推荐 c 库。所以很明显你不需要比c库更多的东西,但我的回答完全符合你的问题,或者,也许这个问题不太好。

您可以使用优秀的 ZeroMQ 和 EPGM 协议(封装在 UDP 中)

zmq_pgm - ØMQ 使用 PGM 的可靠多播传输

在服务器端

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 回答