Windows下 Zmq v4.0.4的使用 (C++)

Windows下 Zmq v4.0.4的使用 (C++)

最近在研究Zero的使用。

我在网上找了一下,发觉大部分博客都写得乱七八糟,又不写明什么版本,什么系统下的,我都不知道怎么样才能弄出个编译过的程序来,只好自己摸索了。

我是windows下 使用vs2010的,v4.0.4的版本官方 0mq api 好像还没加上去,我是参照老版本(v3.1)的用法来的。

使用前你要对windows下动态库的使用有个基本了解。我的上一篇博客有讲,但有点乱,有时间再改一改。

这里我是用了动态库的隐式连接,需要动态库的 动态库文件".dll" , 动态库的LIB文件".lib" , 动态库的函数引入声明 "zmq.h" 和 "zmq_utils.h" 中有了(实现方式应该是我上篇博客末尾中的 "预编译开关切换类的导入导出定义");

本篇要试的是请求--回应模式:

                                                                    

 

使用步骤:

  1.Zmq动态库的获取:

  首先先下载 Zeromq 下来:http://zeromq.org/area:download,点击”Windows installers",下完安装。

  

 

  安装完成后,在安装目录   C:\Program Files\ZeroMQ 4.0.4 下面,你能找到刚刚的4个文件:

     ZeroMQ 4.0.4 \bin 中的  “libzmq-v100-mt-gd-4_0_4.dll”,

     ZeroMQ 4.0.4 \lib  中的 "libzmq-v100-mt-gd-4_0_4.lib",

     ZeroMQ 4.0.4 \include  中的"zmq.h" 和 "zmq_utils.h"

  复制到你 新建要用的 项目工作目录当中。

    这是服务端的,客户端也一样;

如果你的编译器不是vs2010,需要什么版本请参考:http://zeromq.org/distro:microsoft-windows

 

  至于Debug版在是带调试信息的,Release版文件则小很多,两个都可以用,你个人喜欢。  

  2.Zmq动态库的使用:

     1.创建server端,win32控制台 ,空项目,把 动态库文件复制进来。代码如下:

复制代码
//2014-4-2  programed by sixbeauty
//zeromp 通讯测试server 端
#include "zmq.h"
#include "zmq_utils.h"            //Zeromq 函数的导入在这里帮我们实现了
#include <iostream>
#pragma comment(lib,"libzmq-v100-mt-gd-4_0_4.lib")
int main()
{
    std::cout << "-------------------Zeromq REP style-----------------------" <<std::endl;
    std::cout << "---------------------Author:SanYue------------------------" <<std::endl;

    void* context=zmq_init(1);    //指定zmq 处理I/0事件的thread pool 为1
    void* z_socket=zmq_socket(context,ZMQ_REP);

    zmq_bind(z_socket,"tcp://*:5555");    // accept connections on a socket

    int recvn=1;
    while(1)    //循环工作
    {    
        //接受部分
        zmq_msg_t recv_msg;
        zmq_msg_init(&recv_msg);
        zmq_msg_recv(&recv_msg,z_socket,0);                            //0表示非阻塞
        std::cout<<"第\t"<<recvn++<<"\t次收到client信息:\t";
        std::cout<<(char*)zmq_msg_data(&recv_msg)<<std::endl;
        zmq_msg_close(&recv_msg);

        //发送部分
        zmq_msg_t send_msg;
        zmq_msg_init_size(&send_msg,6);
        memcpy(zmq_msg_data(&send_msg),"world",6);
        zmq_sendmsg(z_socket,&send_msg,0);
        zmq_msg_close(&send_msg);
    }
    zmq_close(z_socket);
    zmq_term(context);
            
    return 0;
}
复制代码

 

     2.client端,一样是 win32控制台 空项目,把 动态库文件复制进来。代码如下:

复制代码
//2014-4-2  programed by sixbeauty
//zeromp 通讯测试client 端
#include "zmq.h"
#include "zmq_utils.h"            //Zeromq 函数的导入在这里帮我们实现了
#include <iostream>
#pragma comment(lib,"libzmq-v100-mt-gd-4_0_4.lib")
int main()
{
    std::cout << "-------------------Zeromq REB style-----------------------" <<std::endl;
    std::cout << "---------------------Author:SanYue------------------------" <<std::endl;

    void* context=zmq_init(1);    //指定zmq 处理I/0事件的thread pool 为1
    void* z_socket=zmq_socket(context,ZMQ_REQ);

    zmq_connect(z_socket,"tcp://localhost:5555");    // accept connections on a socket

    for(int i=0;i<9;i++)    //循环工作
    {
        system("pause");    //暂停

        //发送部分
        zmq_msg_t send_msg;
        zmq_msg_init_size(&send_msg,6);
        memcpy(zmq_msg_data(&send_msg),"hello",6);
        zmq_msg_send(&send_msg,z_socket,0);
        zmq_msg_close(&send_msg);

        //接受部分
        zmq_msg_t recv_msg;
        zmq_msg_init(&recv_msg);
        zmq_msg_recv(&recv_msg,z_socket,0);                    //0表示非阻塞
        printf("收到Server端回答:\t");
        std::cout<<(char*)zmq_msg_data(&recv_msg)<<std::endl;
        zmq_msg_close(&recv_msg);
    
    
    }
    zmq_close(z_socket);
    zmq_term(context);
            
    return 0;
}
复制代码

  

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值