ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信
2014-10-23 20:04
567 查看
本文内容摘要: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)解压源文件
3)
3.1进入zmq目录并进行编译和安装
3.2执行配置文件
3.3 进行编译
3.4 安装zmq
4)现在开始使用zmq进行网络通信
4.1接收端代码
4.2发送端代码
5)在CentOS下编译通过,记得要加zmq的链接库 -lzmq
6)在机器192.168.1.2上运行recv程序,在同一个局域网的另一台机器(同一台机器也可以)上运行send程序,结果如下
6.1接收端
6.2 发送端
7)结束语
以上是zmq最基本的网络通讯实例,在此基础上可以进行更复杂的设计,写出一些网络聊天、文件传输等的网络软件。
如何在Windows上使用ZeroMQ请看这里:/article/5180454.html
更多 ZeroMQ API :/article/5180372.html
作者:风波
mail : fengbohello@qq.com
首先在机器中安装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接收端代码
//包含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 0; } //创建zmq socket ,socket目前有6中属性 ,这里使用dealer方式 //具体使用方式请参考zmq官方文档(zmq手册) if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL) { zmq_ctx_destroy(pCtx); return 0; } int iRcvTimeout = 5000;// millsecond //设置zmq的接收超时时间为5秒 if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iRcvTimeout, sizeof(iRcvTimeout)) < 0) { zmq_close(pSock); zmq_ctx_destroy(pCtx); return 0; } //绑定地址 tcp://*:7766 //也就是使用tcp协议进行通信,使用网络端口 7766 if(zmq_bind(pSock, pAddr) < 0) { zmq_close(pSock); zmq_ctx_destroy(pCtx); return 0; } printf("bind at : %s\n", pAddr); while(1) { char szMsg[1024] = {0}; printf("waitting...\n"); errno = 0; //循环等待接收到来的消息,当超过5秒没有接到消息时, //zmq_recv函数返回错误信息 ,并使用zmq_strerror函数进行错误定位 if(zmq_recv(pSock, szMsg, sizeof(szMsg), 0) < 0) { printf("error = %s\n", zmq_strerror(errno)); continue; } printf("received message : %s\n", szMsg); } return 0; }
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 0; } //创建socket if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL) { zmq_ctx_destroy(pCtx); return 0; } int iSndTimeout = 5000;// millsecond //设置接收超时 if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iSndTimeout, sizeof(iSndTimeout)) < 0) { zmq_close(pSock); zmq_ctx_destroy(pCtx); return 0; } //连接目标IP192.168.1.2,端口7766 if(zmq_connect(pSock, pAddr) < 0) { zmq_close(pSock); zmq_ctx_destroy(pCtx); return 0; } //循环发送消息 while(1) { static int i = 0; char szMsg[1024] = {0}; snprintf(szMsg, sizeof(szMsg), "hello world : %3d", i++); printf("Enter to send...\n"); if(zmq_send(pSock, szMsg, sizeof(szMsg), 0) < 0) { fprintf(stderr, "send message faild\n"); continue; } printf("send message : [%s] succeed\n", szMsg); getchar(); } return 0; }
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 : 0 waitting... received message : hello world : 1 waitting... received message : hello world : 2 waitting... received message : hello world : 3 waitting... received message : hello world : 4 waitting... received message : hello world : 5 waitting...
6.2 发送端
$ ./send Enter to send... send message : [hello world : 0] succeed Enter to send... send message : [hello world : 1] succeed Enter to send... send message : [hello world : 2] succeed Enter to send... send message : [hello world : 3] succeed Enter to send... send message : [hello world : 4] succeed Enter to send... send message : [hello world : 5] succeed
7)结束语
以上是zmq最基本的网络通讯实例,在此基础上可以进行更复杂的设计,写出一些网络聊天、文件传输等的网络软件。
如何在Windows上使用ZeroMQ请看这里:/article/5180454.html
更多 ZeroMQ API :/article/5180372.html
作者:风波
mail : fengbohello@qq.com
相关文章推荐
- ZeroMQ实例-使用ZMQ(ZeroMQ)进行局域网内网络通信
- ZeroMQ实例-使用ZeroMQ进行windows与linux之间的通信
- ZeroMQ实例-使用ZeroMQ进行windows与linux之间的通信
- System.IO系列:局域网内多线程使用命名管道在进程之间通信实例
- 浅析J2ME终端使用http协议进行网络通信
- Java 使用ZeroMQ 2.2 进行通信编程
- Android中基于TCP协议的网络通信之使用Socket进行通信
- 一个使用CSocket类的网络通信实例
- Android中基于TCP协议的网络通信之使用Socket进行通信
- C#中使用命名管道进行进程通信的实例
- Android 使用 HttpClient 进行网络通信,包括Get方式和Post方式
- python网络编程之TCP通信实例和socketserver框架使用例子
- Android网络编程之使用HttpClient进行Get方式通信
- Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
- Java UDP使用Socket进行网络通信(0)
- 使用命名管道通过网络在进程之间进行通信
- Android网络开发中如何使用JSON进行网络通信---Android JSON数据通讯方法解析
- C#使用命名管道通过网络在进程之间进行通信
- Android网络开发中如何使用JSON进行网络通信
- 【Linux网络编程实例】实例二:利用TCP协议进行客户端与服务器通信