码迷,mamicode.com
首页 > 其他好文 > 详细

zeroMQ

时间:2018-03-09 17:53:26      阅读:461      评论:0      收藏:0      [点我收藏+]

标签:stdio.h   com   创建   消息   blog   send   ext   官方   std   

一、安装

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

 

四、

zeroMQ

标签:stdio.h   com   创建   消息   blog   send   ext   官方   std   

原文地址:https://www.cnblogs.com/dong1/p/8534725.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!