一、安装
wget http://download.zeromq.org/zeromq-4.0.3.tar.gz
tar -zxvf zeromq-4.0.3.tar.gz
cd /zeromq-4.0.3
./configure
缺了c++编译器
sudo apt-get install g++
make
sudo make install
二、ZeroMQ应用实例(网上找的 郝峰波 同学的实例 )
recv.c
//包含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; }
send.c
//包含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; }
编译时要加zmq的链接库 -lzmq
1 gcc -o recv recv.c -lzmq
2 gcc -o send send.c -lzmq
运行出错,找不到libzmq.so.3库
vim /etc/ld.so.conf
加入 libzmq.so.3 的路径 /usr/local/lib/libzmq.so.3
sudo ldconfig
四、