我可以从我的Linux(C)应用程序调用库的任何建议,以便使用多播UDP将简单日志消息发送给碰巧在网络上侦听的任何人?
答案 0 :(得分:2)
您不需要库来发送组播数据包。将UDP消息发送到多播套接字仅比将其发送到单播地址要复杂得多。
特别是,您需要使用setsockopt
来设置数据包的IP_MULTICAST_TTL
。
接收方稍微困难 - 您必须使用setsockopt
IP_ADD_MEMBERSHIP
加入特定的多播群组才能接收发送给它的消息。
这些选项都记录在man 7 ip
。
答案 1 :(得分:0)
当你问“任何一个图书馆的推荐”时,我认为你不仅仅想要标准的c库,因为我从未见过有人问过是否有人推荐c库到c开发。显然你不需要任何比c库更多的东西,但我的答案完全符合你的问题,或者,问题可能不太好。
您可以使用优秀的ZeroMQ和EPGM协议(封装在UDP内)
zmq_pgm - ØMQ reliable multicast transport using 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);