为什么ZeroMQ PGM多播不接收多播消息? (C ++,Windows)

2022年 10月 17日 发表评论
免费、便宜/高性价比 服务器汇总(已更新):点击这里了解

本站教程收集整理的这篇文章主要介绍了为什么ZeroMQ PGM多播不接收多播消息? (C ++,Windows),本站教程本站觉得挺不错的,现在分享给大家,也给大家做个参考。

环境设置:

– 多播发送和接收应用程序都在同一台机器上运行

我正在整合ZeroMQ多播与Openpgm支持,但在我的示例代码下面面临问题。

即在接收机应用程序中“多播消息未被接收” 。 请纠正我,如果我做错了。 也无法find关于ZeroMQ pgm多播要求的适当例子。

// ZMQ_pgm_receive.cpp : // //Headers #include "stdafx.h" #include "zmq.h" #include <iostream> #include <windows.h> std::string fullurl = "pgm://eth0;239.255.0.1:30001"; static int roundtrip_count = 50; static size_t message_size = 4; int _tmain(int argc,_TCHAR* argv[]) { void *ctx = NULL,*s = NULL; int con; int i; ctx = zmq_init (1); if (!ctX) { printf ("error in zmq_init: %sn",zmq_strerror (errno)); return -1; } s = zmq_socket (ctx,ZMQ_SUB); if (!s) { printf ("error in zmq_socket: %sn",zmq_strerror (errno)); return -1; } con = zmq_bind(socket,fullurl.c_str()); if (con == 0) { printf ("error in zmq_bind: %sn",zmq_strerror (errno)); return -1; } zmq_msg_t msg; int rc = zmq_msg_init (&msg); if (rc != 0) { printf ("error in zmq_msg_init: %sn",zmq_strerror (errno)); return -1; } for (i = 0; i != roundtrip_count; i++) { rc = zmq_recvmsg (s,&msg,0); if (rc < 0) { printf ("error in zmq_recvmsg: %sn",zmq_strerror (errno)); return -1; } printf("message receivedn"); if (zmq_msg_size (&msg) != message_sizE) { printf ("message of incorrect size receivedn"); return -1; } Sleep(1000); } rc = zmq_msg_close (&msg); if (rc != 0) { printf ("error in zmq_msg_close: %sn",zmq_strerror (errno)); return -1; } rc = zmq_close (s); if (rc != 0) { printf ("error in zmq_close: %sn",zmq_strerror (errno)); return -1; } /*rc = zmq_ctx_term (ctX); if (rc != 0) { printf ("error in zmq_ctx_term: %sn",zmq_strerror (errno)); return -1; } ctx = NULL; */ return 0; }

// ZMQ_pgm_send.cpp : // #include "stdafx.h" #include "zmq.h" #include <iostream> #include <windows.h> std::string fullurl = "pgm://eth0;239.255.0.1:30001"; static int roundtrip_count = 50; static size_t message_size = 4; int _tmain(int argc,ZMQ_PUB); if (!s) { printf ("error in zmq_socket: %sn",zmq_strerror (errno)); return -1; } con = zmq_connect(socket,fullurl.c_str()); if (con == 0) { printf ("error in zmq_connect: %sn",zmq_strerror (errno)); return -1; } zmq_msg_t msg; int rc = zmq_msg_init_size (&msg,message_sizE); if (rc != 0) { printf ("error in zmq_msg_init: %sn",zmq_strerror (errno)); return -1; } memset(zmq_msg_data (&msg),'A',message_size ); for (i = 0; i != roundtrip_count; i++) { rc = zmq_sendmsg (s,0); if (rc < 0) { printf ("error in zmq_sendmsg: %sn",zmq_strerror (errno)); return -1; } } rc = zmq_msg_close (&msg); if (rc != 0) { printf ("error in zmq_msg_close: %sn",zmq_strerror (errno)); return -1; } ctx = NULL; */ return 0; }

如果我做错了,请纠正我。

在Linux上接收来自特定networking接口的组播

发现我的应用程序安装在Networking上的电脑

Linux和Windows套接字编程中的INADDR_ANY之间的区别

如何通过Linux中的特定接口发送组播数据包

从Windows上的Go * net.UDPConn获取syscall.Handle?

在RedHat 5.1中设置IGMP版本(Tikanga)

join多播群组时只需要一个PORT还是IP?

如何设置一个用于2个网卡的UDP组播套接字?

Linux组播中排队/缓冲延迟的位置在哪里?

UDP数据包由linux内核丢弃

解决了以上在评论中提出的[步骤0]

一个人应该

检测

缺少ZMQ_SUBSCRIBE设置,因此SUB端过滤所有流量

ZMQ_SUBSCRIBE :建立消息过滤器

ZMQ_SUBSCRIBE选项应在ZMQ_SUB套接字上建立一个新的消息过滤器。 新创建的ZMQ_SUB套接字将过滤掉所有传入的消息,因此您应该调用此选项来建立初始消息过滤器。

长度为零的空白option_value将订阅所有传入的消息。 一个非空的option_value应该订阅以指定的前缀开头的所有消息。 多个过滤器可以连接到一个ZMQ_SUB套接字,在这种情况下,如果至少匹配一个过滤器,则应该接受一个消息。

无论如何, 欢迎和享受这些分布式系统计算的智能工具!

本站总结

以上是本站教程为你收集整理的为什么ZeroMQ PGM多播不接收多播消息? (C ++,Windows)全部内容,希望文章能够帮你解决为什么ZeroMQ PGM多播不接收多播消息? (C ++,Windows)所遇到的程序开发问题。

如果觉得本站教程网站内容还不错,欢迎将本站教程推荐给好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。

小咸鱼

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: