ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信

Ubuntu 下搭建 zmq + c/c++ 开发环境 1. 下载zmq 的源码 2. 解压, 3. 进入builds 目录下的 cmake目录 4. sudo ./ **.sh 5. 在build_make目录下有生成文件, 6. 将bind_make目录下的lib文件复制到上一个目录下 7.在/etc/profile 修改环境变量       export C_INCLUDE_PATH=$C_INCLUDE_PA 阅读详情

ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信

本文内容摘要:1)安装zeromq、2)实例说明使用zmq进行网络间的消息发送和接收

首先在机器中安装zmq库

步骤如下:

1)下载zeromq的源代码,ZeroMQ的官方网址:http://zeromq.org/    

    百度网盘的下载地址 : http://pan.baidu.com/s/1mg61em0 

    ZMQ API 的 百度网盘 下载地址 : http://pan.baidu.com/s/1jGDqXfS

    注:在本文写作时,ZMQ版本已经升级到4.1.0,不过影响没多大

2)解压源文件

tar zxf zeromq-4.0.3.tar.gz

3)

 3.1进入zmq目录并进行编译和安装

cd zeromq-4.0.3

 3.2执行配置文件

./configure

 3.3 进行编译

make

 3.4 安装zmq

make install

4)现在开始使用zmq进行网络通信

 4.1接收端代码

复制代码

 1 //包含zmq的头文件 
 2 #include <zmq.h>
 3 #include "stdio.h"
 4 
 5 int main(int argc, char * argv[])
 6 {
 7     void * pCtx = NULL;
 8     void * pSock = NULL;
 9     const char * pAddr = "tcp://*:7766";
10 
11     //创建context,zmq的socket 需要在context上进行创建 
12     if((pCtx = zmq_ctx_new()) == NULL)
13     {
14         return 0;
15     }
16     //创建zmq socket ,socket目前有6中属性 ,这里使用dealer方式
17     //具体使用方式请参考zmq官方文档(zmq手册) 
18     if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL)
19     {
20         zmq_ctx_destroy(pCtx);
21         return 0;
22     }
23     int iRcvTimeout = 5000;// millsecond
24     //设置zmq的接收超时时间为5秒 
25     if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iRcvTimeout, sizeof(iRcvTimeout)) < 0)
26     {
27         zmq_close(pSock);
28         zmq_ctx_destroy(pCtx);
29         return 0;
30     }
31     //绑定地址 tcp://*:7766 
32     //也就是使用tcp协议进行通信,使用网络端口 7766
33     if(zmq_bind(pSock, pAddr) < 0)
34     {
35         zmq_close(pSock);
36         zmq_ctx_destroy(pCtx);
37         return 0;
38     }
39     printf("bind at : %s\n", pAddr);
40     while(1)
41     {
42         char szMsg[1024] = {0};
43         printf("waitting...\n");
44         errno = 0;
45         //循环等待接收到来的消息,当超过5秒没有接到消息时,
46         //zmq_recv函数返回错误信息 ,并使用zmq_strerror函数进行错误定位 
47         if(zmq_recv(pSock, szMsg, sizeof(szMsg), 0) < 0)
48         {
49             printf("error = %s\n", zmq_strerror(errno));
50             continue;
51         }
52         printf("received message : %s\n", szMsg);
53     }
54 
55     return 0;
56 }

复制代码

 4.2发送端代码

复制代码

 1 //包含zmq的头文件 
 2 #include <zmq.h>
 3 #include "stdio.h"
 4 
 5 int main(int argc, char * argv[])
 6 {
 7     void * pCtx = NULL;
 8     void * pSock = NULL;
 9     //使用tcp协议进行通信,需要连接的目标机器IP地址为192.168.1.2
10     //通信使用的网络端口 为7766 
11     const char * pAddr = "tcp://192.168.1.2:7766";
12 
13     //创建context 
14     if((pCtx = zmq_ctx_new()) == NULL)
15     {
16         return 0;
17     }
18     //创建socket 
19     if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL)
20     {
21         zmq_ctx_destroy(pCtx);
22         return 0;
23     }
24     int iSndTimeout = 5000;// millsecond
25     //设置接收超时 
26     if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iSndTimeout, sizeof(iSndTimeout)) < 0)
27     {
28         zmq_close(pSock);
29         zmq_ctx_destroy(pCtx);
30         return 0;
31     }
32     //连接目标IP192.168.1.2,端口7766 
33     if(zmq_connect(pSock, pAddr) < 0)
34     {
35         zmq_close(pSock);
36         zmq_ctx_destroy(pCtx);
37         return 0;
38     }
39     //循环发送消息 
40     while(1)
41     {
42         static int i = 0;
43         char szMsg[1024] = {0};
44         snprintf(szMsg, sizeof(szMsg), "hello world : %3d", i++);
45         printf("Enter to send...\n");
46         if(zmq_send(pSock, szMsg, sizeof(szMsg), 0) < 0)
47         {
48             fprintf(stderr, "send message faild\n");
49             continue;
50         }
51         printf("send message : [%s] succeed\n", szMsg);
52         getchar();
53     }
54 
55     return 0;
56 }

复制代码

5)在CentOS下编译通过,记得要加zmq的链接库 -lzmq

1 gcc -o recv recv.c -lzmq
2 gcc -o send send.c -lzmq

6)在机器192.168.1.2上运行recv程序,在同一个局域网的另一台机器(同一台机器也可以)上运行send程序,结果如下

 6.1接收端

复制代码

 1 $ ./recv 
 2 bind at : tcp://*:7766
 3 waitting...
 4 received message : hello world :   0
 5 waitting...
 6 received message : hello world :   1
 7 waitting...
 8 received message : hello world :   2
 9 waitting...
10 received message : hello world :   3
11 waitting...
12 received message : hello world :   4
13 waitting...
14 received message : hello world :   5
15 waitting...

复制代码

 6.2 发送端

复制代码

 1 $ ./send 
 2 Enter to send...
 3 send message : [hello world :   0] succeed
 4 
 5 Enter to send...
 6 send message : [hello world :   1] succeed
 7 
 8 Enter to send...
 9 send message : [hello world :   2] succeed
10 
11 Enter to send...
12 send message : [hello world :   3] succeed
13 
14 Enter to send...
15 send message : [hello world :   4] succeed
16 
17 Enter to send...
18 send message : [hello world :   5] succeed

复制代码

7)结束语

以上是zmq最基本的网络通讯实例,在此基础上可以进行更复杂的设计,写出一些网络聊天、文件传输等的网络软件。

如何在Windows上使用ZeroMQ请看这里:http://www.cnblogs.com/fengbohello/p/4369082.html

 

更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html 

ZeroMQ学习笔记(7)——使用zmq高级框架 第七章 使用zmq高级框架 ·如何安全地从创意过渡到能工作的原型(MOPED模式) ·将的数据作为zmq消息序列化的不同方式 ·如何用代码生成二进制序列化的编解码器 ·如何使用GSL工具来建立自定义的代码生成器 ·如何撰写和许可一个协议规范 ·如何在zmq上进行可快速重新启动的文件传输 ·如何实现基于信用的流量控制 ·如何将协议的服务器和客户端构建为状态机 ·如何制作一个在zmq之上的安全协议 ·一个大型的文件发布系统(FileMQ) MOPED的目标是定义一个过程,通过它可以取得针对一个新的分布式应用程序 阅读详情

相关推荐

ZMQ的使用

使用QTcp也是类似,只不过各进程需要指定对应的服务器和客户端,本地进程间通信如果自己实现我还是推进使用QUdpSocket,因为UDP面向报文,无需建立链接,除了单播还可以广播、组播,而且因为处于同一主机,所以基本不用考虑整个报文丢失的问题。主机1中的进程A想要与主机2中的进程B进行通信,则首先他们之间需要知道对方所在主机的IP地质以及对方所绑定的端口,好比A和B住在同一个小区(同一个局域网内),A派人给B送信则需要制度B所住的楼栋(主机IP地址)以及B的门牌号(绑定的IP地址)。

苍天愚弄我 3002

ubuntu系统下的zmq数据传输

基于zguide中C++案例,实现了发送一个字符串,接收到该字符串并返回接收成功信号。

slender_1031的博客 984

开源实战 | 基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程

本文详细介绍了基于SolidWorks与Matlab的并联索驱机器人轨迹规划全流程,涵盖从基础概念到实战技巧的各个环节。通过SolidWorks建模、Matlab运动学实现及轨迹优化策略,展示了如何实现高精度轨迹规划,适用于摄影、医疗等领域的机器人应用。

weixin_28331555的博客 405

ZMQ设置socket选项

Name zmq_setsockopt –设置ZMQ socket的属性 Synopsis int zmq_setsockopt (void *socket, int option_name, const void *option_value, size_t option_len); 注意:除了以下属性,所有的属性均需要在对socket进行bind/connect操作之前设置:...

weixin_33989780的博客 546

std::map看来可以被淘汰了?可以用vector来替代,而且更好

vector的优势在于内存连续,可以先std::sort,然后std::lower_bound,或者std::binary_search。而std::map,insert的时候,需要new出内存。

tumu_C的博客 1020

Bob-Smith电路在千兆以太网(1000BASE-T)中的优化设计与性能分析

本文深入探讨了Bob-Smith电路在千兆以太网(1000BASE-T)中的关键作用与优化设计。分析表明,相较于单纯追求75欧姆电阻的精确匹配,优化重点应转向PCB布局对称性、高频元件选型及共模路径完整性,以有效抑制共模噪声、提升信号完整性,并确保系统通过EMC测试。

weixin_29281941的博客 281

zmq recv 退出线程

设置socket的recv接收操作超时时间,socket.setsockopt(ZMQ_RCVTIMEO,300); 如果设置recv 为阻塞,则不好优雅地退出线程,只能暴力退出。 zmq官网翻译版: https://www.cnblogs.com/fengbohello/p/4398953.html ...

bubbleyang的博客 3281

VSCode + Clangd 配置避坑实录:从‘红波浪线’到完美代码提示的完整心路

本文详细记录了VSCode与Clangd配置过程中的常见问题及解决方案,从编译数据库生成到参数调优,帮助C++开发者快速解决代码提示失效、头文件找不到等问题,实现完美代码补全体验。重点介绍了Clangd与LLDB的集成配置及性能优化技巧,适用于Linux和跨平台开发环境。

weixin_28829479的博客 493

zmq是基于tcp实现的吗_ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信

本文内容摘要:1)安装zeromq、2)实例说明使用zmq进行网络间的消息发送和接收首先在机器中安装zmq库步骤如下:1)下载zeromq的源代码,ZeroMQ的官方网址:注:在本文写作时,ZMQ版本已经升级到4.1.0,不过影响没多大2)解压源文件tar zxf zeromq-4.0.3.tar.gz3)3.1进入zmq目录并进行编译和安装cd zeromq-4.0.33.2执行配置文件./co...

weixin_29894169的博客 619

Cibersort免疫浸润 --- 详细教程

免疫浸润是指免疫细胞如淋巴细胞、浆细胞、巨噬细胞等进入到组织或器官中,并在这些组织或器官中发挥免疫功能的过程。免疫细胞的浸润可以是炎症反应的一部分,也可以是针对感染、肿瘤或其他疾病的免疫应答的一部分。免疫浸润通过调节免疫反应和炎症反应的程度和类型,起到维护机体免疫平衡和清除异常细胞或病原体的作用。在某些情况下,免疫浸润可能导致炎症反应过度,引起组织损伤,例如自身免疫性疾病。因此,免疫浸润在许多疾病的诊断和治疗中都具有重要的意义。免疫浸润可以通过组织切片染色和免疫组织化学等方法观察和分析。

ZxVSaccount的博客 9111

精度0.01%决定续航多20km|新能源汽车研发测试:功率分析仪到底有多硬核?

新能源汽车测试、功率分析仪、电驱系统、效率MAP、谐波THD、GB/T18488、CLTC工况、三电测试、台架标定、能量流分析。中的核心作用,用公式、思维导图、实战金句与避坑指南,帮研发测试人员把准数据、提效率、降返工,看完就能落地用。点击关注,进公众号主页查看历史文章,**台架接线图、效率MAP模板、GB/T18488测试清单等。优化弱磁/调制策略,高效区占比提升5%,CLTC续航直接+8~20km。同样工况,两次数据差0.8%,报告根本没法交。结果:数据飘、定位慢、反复返工、认证不过。

优快云-新能源汽车研发测试专业博主 174

zmq相关

  zmq安装与使用:https://blog.youkuaiyun.com/u011299686/article/details/42713367 zeroMQ之PUB/SUB模式:https://blog.youkuaiyun.com/zhou85xin/article/details/25234921 zeroMQ之PUSH/PULL模式:http://iyuan.iteye.com/blog/974040 ...

weixin_40710375的博客 156

代数拓扑与AI架构:AI应用架构师深入探索数学研究如何分析复杂系统的结构特性

随着人工智能技术的飞速发展,AI系统变得越来越复杂。AI应用架构师需要有效的工具和方法来理解、设计和优化这些复杂系统。代数拓扑作为数学的一个分支,提供了独特的视角和技术来分析复杂系统的结构特性。本文旨在帮助AI应用架构师深入了解代数拓扑,以及如何将其应用于AI架构设计中,提升对复杂系统的分析能力。首先,我们会介绍代数拓扑和AI架构相关的核心概念及其联系,通过有趣的故事引入主题,让读者轻松理解复杂概念。接着,深入探讨代数拓扑的核心算法原理,结合具体的编程语言代码示例详细阐述。

大模型应用工坊 671

ZeroMQ实例-使用ZeroMQ进行windows与linux之间的通信

1、本文包括   1)在windows下使用ZMQ   2)在windows环境下与Linux环境下进行网络通信 2、在Linux下使用ZMQ   之前写过一篇如何在Linux环境下使用ZMQ的文章 《ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信》,这里就不再赘述。 3、在Windows环境下使用ZMQ   3.1)安装W...

weixin_33901926的博客 138

120、NPU的Mythic M1076:模拟存算一体NPU

这篇文章分享了作者调试Mythic M1076模拟存算一体NPU的实战经验,主要包含以下要点: 硬件设计陷阱:参考电压输入必须使用低ESR电容,普通贴片电容会导致模拟计算阵列工作异常。 核心技术原理: 采用真正的存算一体架构,将权重存储为模拟电压 使用浮栅晶体管存储权重,通过电流叠加实现乘法运算 包含108个计算单元阵列(Tile),每个256×256规模 使用注意事项: 编程模型特殊,需要依赖SDK自动映射网络层 存在6-8位有效精度限制,需用量化感知训练 功耗特性独特,静态偏置电流占主要功耗 调试手段有

m0_50546716的博客 125

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

分布式进阶(十五)ZMQ

我们为什么需要ZMQ 目前的应用程序很多都会包含跨网络的组件,无论是局域网还是因特网。这些程序的开发者都会用到某种消息通信机制。有些人会使用某种消息队列产品,而大多数人则会自己手工来做这些事,使用TCP或UDP协议。这些协议使用起来并不困难,但是,简单地将消息从A发给B,和在任何情况下都能进行可靠的消息传输,这两种情况显然是不同的。 让我们看看在使用纯TCP协议进行消息传输时会遇到的一些典型问...

IT全栈 华强工作室 5万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

zeromq集群

ZeroMQ 是一个很有个性的项目,它原来是定位为“史上最快消息队列”,所以名字里面有“MQ”两个字母,但是后来逐渐演变发展,慢慢淡化了消息队列的身影,改称为消息内核,或者消息层了。从网络通信的角度看,它处于会话层之上,应用层之下,有了它,你甚至不需要自己写一行的socket函数调用就能完成复杂的网络通信工作。 先看看这段局域网内的简单通信: receiver.cpp /...

a857351839的博客 362

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

贝叶斯统计 [韦来生编]

贝叶斯(Bayes)统计是近几十年来迅速发展起来的数理统计的一个重要分支。贝叶斯方法与经典统计方法的主要不同之处是进行统计推断时除了利用样本信息外,还要利用参数的先验信息,因此可以提高统计推断或统计决策的效果。它在经济、金融、生物、医学、自然科学和社会科学等许多领域具有广泛的应用。贝叶斯方法的研究已渗透到了统计学的几乎所有领域。作者在给中国科学技术大学概率论与数理统计专业本科生开设的“数理统计”课程中有一章专门讲授“贝叶斯方法和统计决策理论”,近十年来也给中国科学技术大学概率统计专业研究生开设过几次“贝叶斯分析”课。本书是在对过去讲稿的内容作了适当的增减和调整的基础上完成的。  本书共分六章。第1章是绪论,介绍了贝叶斯统计的若干基本概念,同时对必要的数理统计的基础知识有重点地作了回顾。第二章介绍了确定先验分布的若干可供选择的方法。第三章介绍了几类常见统计模型参数的后验分布的主要结果和计算方法。第四章和第五章分别介绍了“贝叶斯统计推断”和“贝叶斯统计决策”的内容。第六章介绍了贝叶斯统计计算的若干方法,包括蒙特卡洛方法和马尔可夫链蒙特卡洛(MCMC)方法以及相关统计软件的简介。本书的每一章附右大量的例题和习题,书末附有常用的几个表格和部分习题解答供读者查用。  大约可在54学时内讲授本书的第1章至第六章的主要内容,教师可根据学时需要选讲本书第1章至第六章的部分内容。书中标“*”号的章节可略去不讲,留给读者作为阅读材料。第六章例题中的R代码和部分例题的数据文件等可从作者个人主页下载。  作者在编写本书的过程中参考了J.O.Berger教授的《统计决策论及贝叶斯分析》和茆诗松教授编写的《贝叶斯统计》等书中的一些内容,以及《贝叶斯分析》一书中由张伟平博士编写的有关贝叶斯统计计算的一些内容。在此表示衷心感谢。  本书编写准备过程中,中国科学技术大学统计与金融系的几个研究生帮助完成了本书部分中文的录入和排版,作者对他们的辛勤工作表示真诚的感谢。高等教育出版社为本书的出版给予了大力支持。在此一并致谢。

ZeroMQ:不一样的套接字。

inproc协议使用ZeroMQ的套接字来实现通信,它提供了一种简单的、可靠的、异步的消息传递机制,可以用于构建各种类型的应用程序,例如分布式系统、消息队列、事件驱动系统等。ipc协议使用ZeroMQ的套接字来实现通信,它提供了一种简单的、可靠的、异步的消息传递机制,可以用于构建各种类型的应用程序,例如分布式系统、消息队列、事件驱动系统等。pgm协议使用ZeroMQ的套接字来实现通信,它提供了一种简单的、可靠的、异步的消息传递机制,可以用于构建各种类型的应用程序,例如分布式系统、消息队列、事件驱动系统等。

ALex_zry的博客 1417

Zeromq

Zeromq的资源: Zeromq模式: http://blog.codingnow.com/2011/02/zeromq_message_patterns.html zeromq主页: http://www.zeromq.org/ Zeromq Guild: http://zguide.zeromq.org/page:all#Fixing-the-World

chivalry 2505
上一篇: 各种排序算法总结
下一篇: google protobuf使用
zero_china
博客等级 码龄16年 10粉丝 0原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值