我可以从我的 Linux (C) 应用程序调用的库的任何建议,以使用多播 UDP 向碰巧在网络上监听的任何人发送简单的日志消息?
问问题
817 次
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 中)
在服务器端
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 回答