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访问.但是怎么让别人的电脑也能访问呢?来看看自己写的网站.现在我来讲 ...
随机推荐
- Android高手速成--第二部分 工具库
主要包括那些不错的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. 一.依赖注入DI 通过依赖注入减少Vie ...
- Alpha版本十天冲刺——Day 1
站立式会议 会议总结 队员 今天完成 遇到的问题 明天要做 感想 鲍亮 α版本接口文档初步编写,任务统筹 绘制燃尽图出错 学习http资源访问,服务器请求接口demo测试 作为PM,之前对团队具体要做 ...
- 如何使用JS来检测游览器是什么类型,或android是什么版本号- 转载
var brower = { versions:function(){ var u = window.navigator.userAgent; var num ; if(u.indexOf('Trid ...
- 如何让自己的app尽量不被系统杀死
1. 在Service中重写下面的方法,这个方法有三个返回值, START_STICKY是service被kill掉后自动重写创建 @Override public int onStartComman ...
- Hadoop 部署过程中的一些问题与解决方案
环境--> centos7.1 --> jdk1.8 1.JDK卸载与安装 http://blog.csdn.net/czmchen/article/details/41047187 2. ...
- python基础一
1.1 Python优点 1.简单.优雅.明确 2.强大的模块三方库 3.易移植 4.面向对象 5.可扩展(c\java\c#...) 1.2 Python缺点 1.代码不能加密 2.速度慢 1. ...
- mui问题
2016.7.27 1.当你的html不在文件夹的时候 引路径就不要加../ 2.当用svn提交代码的时候要先右键项目->版本管理->与资源库同步,查看你的修改的地方和原来部署上去的文 ...
- CentOS7 屏幕亮度的命令行管理
1.安装:yum install xgamma 设置亮度:xgamma -gamma n( 0.1 < n < 10.0 ,可以根据自己的喜好设置 2.shell 系统调节亮度调用的是/s ...
- JScrollBar
接到了GUI相关的task,从来没看Java的我只好各种百度加看书了.这里介绍了 JScrollBar 的简单应用. 话不多说,直接上代码和效果图. import java.awt.*; imp ...
- struts2学习记录
1.对于使用Struts2框架的应用而言,尽量不要让超级链接直接接到某个视图资源,因为这种方式增加了额外的风险.推荐将所有请求都发送给Struts框架,让该框架来处理用户请求,即使只是简单的超级链接. ...