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..tar.gz
3)
3.1进入zmq目录并进行编译和安装
- cd zeromq-4.0.
3.2执行配置文件
- ./configure
3.3 进行编译
- make
3.4 安装zmq
- make install
4)现在开始使用zmq进行网络通信
4.1接收端代码
- //包含zmq的头文件
- #include <zmq.h>
- #include "stdio.h"
- int main(int argc, char * argv[])
- {
- void * pCtx = NULL;
- void * pSock = NULL;
- const char * pAddr = "tcp://*:7766";
- //创建context,zmq的socket 需要在context上进行创建
- if((pCtx = zmq_ctx_new()) == NULL)
- {
- return ;
- }
- //创建zmq socket ,socket目前有6中属性 ,这里使用dealer方式
- //具体使用方式请参考zmq官方文档(zmq手册)
- if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL)
- {
- zmq_ctx_destroy(pCtx);
- return ;
- }
- int iRcvTimeout = ;// millsecond
- //设置zmq的接收超时时间为5秒
- if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iRcvTimeout, sizeof(iRcvTimeout)) < )
- {
- zmq_close(pSock);
- zmq_ctx_destroy(pCtx);
- return ;
- }
- //绑定地址 tcp://*:7766
- //也就是使用tcp协议进行通信,使用网络端口 7766
- if(zmq_bind(pSock, pAddr) < )
- {
- zmq_close(pSock);
- zmq_ctx_destroy(pCtx);
- return ;
- }
- printf("bind at : %s\n", pAddr);
- while()
- {
- char szMsg[] = {};
- printf("waitting...\n");
- errno = ;
- //循环等待接收到来的消息,当超过5秒没有接到消息时,
- //zmq_recv函数返回错误信息 ,并使用zmq_strerror函数进行错误定位
- if(zmq_recv(pSock, szMsg, sizeof(szMsg), ) < )
- {
- printf("error = %s\n", zmq_strerror(errno));
- continue;
- }
- printf("received message : %s\n", szMsg);
- }
- return ;
- }
4.2发送端代码
- //包含zmq的头文件
- #include <zmq.h>
- #include "stdio.h"
- int main(int argc, char * argv[])
- {
- void * pCtx = NULL;
- void * pSock = NULL;
- //使用tcp协议进行通信,需要连接的目标机器IP地址为192.168.1.2
- //通信使用的网络端口 为7766
- const char * pAddr = "tcp://192.168.1.2:7766";
- //创建context
- if((pCtx = zmq_ctx_new()) == NULL)
- {
- return ;
- }
- //创建socket
- if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL)
- {
- zmq_ctx_destroy(pCtx);
- return ;
- }
- int iSndTimeout = ;// millsecond
- //设置接收超时
- if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iSndTimeout, sizeof(iSndTimeout)) < )
- {
- zmq_close(pSock);
- zmq_ctx_destroy(pCtx);
- return ;
- }
- //连接目标IP192.168.1.2,端口7766
- if(zmq_connect(pSock, pAddr) < )
- {
- zmq_close(pSock);
- zmq_ctx_destroy(pCtx);
- return ;
- }
- //循环发送消息
- while()
- {
- static int i = ;
- char szMsg[] = {};
- snprintf(szMsg, sizeof(szMsg), "hello world : %3d", i++);
- printf("Enter to send...\n");
- if(zmq_send(pSock, szMsg, sizeof(szMsg), ) < )
- {
- fprintf(stderr, "send message faild\n");
- continue;
- }
- printf("send message : [%s] succeed\n", szMsg);
- getchar();
- }
- return ;
- }
5)在CentOS下编译通过,记得要加zmq的链接库 -lzmq
- gcc -o recv recv.c -lzmq
- gcc -o send send.c -lzmq
6)在机器192.168.1.2上运行recv程序,在同一个局域网的另一台机器(同一台机器也可以)上运行send程序,结果如下
6.1接收端
- 1 $ ./recv
- bind at : tcp://*:7766
- waitting...
- received message : hello world :
- waitting...
- received message : hello world :
- waitting...
- received message : hello world :
- waitting...
- received message : hello world :
- waitting...
- received message : hello world :
- waitting...
- received message : hello world :
- waitting...
6.2 发送端
- $ ./send
- Enter to send...
- send message : [hello world : ] succeed
- Enter to send...
- send message : [hello world : ] succeed
- Enter to send...
- send message : [hello world : ] succeed
- Enter to send...
- send message : [hello world : ] succeed
- Enter to send...
- send message : [hello world : ] succeed
- Enter to send...
- send message : [hello world : ] succeed
7)结束语
以上是zmq最基本的网络通讯实例,在此基础上可以进行更复杂的设计,写出一些网络聊天、文件传输等的网络软件。
如何在Windows上使用ZeroMQ请看这里:http://www.cnblogs.com/fengbohello/p/4369082.html
更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html
作者:风波
mail : fengbohello@qq.com
ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信的更多相关文章
- ZeroMQ实例-使用ZeroMQ进行windows与linux之间的通信
1.本文包括 1)在windows下使用ZMQ 2)在windows环境下与Linux环境下进行网络通信 2.在Linux下使用ZMQ 之前写过一篇如何在Linux环境下使用ZMQ的文章 <Ze ...
- 实现upnp ssdp来查找局域网内的其他节点
upnp协议常用于一些智能家居产品中,这些产品连上家里局域网后,用同样连入家中局域网的手机就能很快检测到此产品了.在区块链技术中,upnp也被应用于寻找同一局域网内的其他节点. 关于upnp的具体描述 ...
- ICMP协议 广播以查询局域网内的所有主机
看到了很多局域网内的主机扫描工具,在想怎么去实现这样一个工具.前几天看了Ping源码--ICMP协议的实例,ICMP可以用来探测网联网内的任一主机,ICMP和广播地址结合来扫描局域网内的所有主机不是很 ...
- 局域网内利用gitlab,jenkins自动生成gitbook并发布(nginx)
安装了GitBook,内网使用,没法用上gitbook的网页. 用gitbook serve只能展示一本书,而且也不利于长期维护. 于是使用gitlab,jenkins,和nginx配合gitbook ...
- Snmp协议应用-扫描局域网内打印机
.h2cls { background: #6fa833 none repeat scroll 0 0 !important; color: #fff; font-family: "微软雅黑 ...
- Windows下查看局域网内某台计算机的MAC地址
我们知道在局域网中,在Windows下,查看局域网内其他主机的ip和对应mac地址的命令是: arp -a 这样可以看到ip和mac地址的对应关系,还是比较方便的 但是有些时候使用arp命令并不能列出 ...
- 查询局域网内在线电脑IP
COLOR 0A CLS @ECHO Off Title 查询局域网内在线电脑IP :send @ECHO off&setlocal enabledelayedexpansion ECHO 正 ...
- 怎么在手机浏览器上访问电脑本地的文件,局域网内,自建WiFi也可以
首先,电脑要有Mysql+Apache+PHP环境,我直接用Wampsever,开启环境后手机和电脑要再同一个局域网内,然后电脑上打开win+R,输入cmd,再输入ipconfig,就可以看着这台的电 ...
- 配置Apache将自己的电脑做服务器使局域网内的电脑访问自己的主机
很多的朋友都想把自己的电脑打造为服务器使别人能够访问.比如说你自己写了一网站,只能自己通过localhost访问或127.0.0.1访问.但是怎么让别人的电脑也能访问呢?来看看自己写的网站.现在我来讲 ...
随机推荐
- 循环中的continue功能
在oracle存储过程中,有时我们希望在循环中为某种情况时不做任何处理,类似于c语言中的continue,跳过本次循环:在oracle 11g中好像增加了这个关键字,在之前版本中我们可以通过如下方式来 ...
- MySQL索引的设计和使用
一.索引可以有效地提升SELECT操作的性能,同时会影响UPDATE.CREATE和DELETE操作的性能.每种引擎对于表的索引有数量和长度的限制. 二.索引的设计原则 (A) 搜索的索引列,不一定是 ...
- Hydra用户手册
Hydra 参数: -R继续从上一次进度接着破解 -S大写,采用SSL链接 -s <PORT>小写,可通过这个参数指定非默认端口 -l <LOGIN>指定破解的用户,对特定用户 ...
- 提取刷机包内system.new.dat文件
转换 使用python脚本sdat2img来完成 sdat2img.py system.transfer.list system.new.dat system.img 输出信息 Skipping co ...
- start WampServer如何关闭浏览目录
打开Httpd.conf IncludesNOEXEC Indexes 去掉这个代码就可以了
- Spring @AspectJ 实现AOP 入门例子(转)
AOP的作用这里就不再作说明了,下面开始讲解一个很简单的入门级例子. 引用一个猴子偷桃,守护者守护果园抓住猴子的小情节. 1.猴子偷桃类(普通类): package com.samter.common ...
- 【krpano】高德地图导航插件(源码+介绍+预览)
简介 krpano可以利用js调用第三方网页版地图,因此可以实现导航效果,用来帮助用户导航到我们全景所在的位置. 效果截图如下,在手机端点击左侧按钮,便会对用户进行定位,跳转至高德地图进行导航 ...
- nginx配置文件或目录404和403
对于Nginx web目录下的文件,如果不想用户访问那么可以配置返回404或者403状态,默认情况下对于目录来说,如果目录下没有默认文档,那么默认返回是403,也就是不允许查看目录列表,但是如果知道静 ...
- MAC 远程桌面链接 证书或链接无效
RDC --> 首选项 --> 安全性 --> 勾选即使验证失败也要链接. 问题解决.
- iOS开发 iOS10推送必看(基础篇)
iOS10更新之后,推送也是做了一些小小的修改,下面我就给大家仔细说说.希望看完我的这篇文章,对大家有所帮助. 原文链接 一.简单入门篇---看完就可以简单适配完了相对简单的推送证书以及环境的 ...