zoukankan      html  css  js  c++  java
  • 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 FileseroMQ 4.0.4 下面,你能找到刚刚的4个文件:

         ZeroMQ 4.0.4 in 中的  “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<<""<<recvn++<<"	次收到client信息:	";
            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端回答:	");
            std::cout<<(char*)zmq_msg_data(&recv_msg)<<std::endl;
            zmq_msg_close(&recv_msg);
        
        
        }
        zmq_close(z_socket);
        zmq_term(context);
                
        return 0;
    }

          这是 REP/REQ 请求/回应模式的尝试,这种模式必须同时有  recv 和 send,具体会在下一篇讲。

          

     

          

     

  • 相关阅读:
    <style>的scope属性
    scrollIntoView的使用
    需要学习的内容列表
    react生命周期
    JS对象-不可扩展对象、密封对象、冻结对象
    神策埋点
    Django初识
    MySQL的sql_mode模式说明及设置
    MySQL的逻辑查询语句的执行顺序
    MySQL行(记录)的详细操作
  • 原文地址:https://www.cnblogs.com/sixbeauty/p/3641335.html
Copyright © 2011-2022 走看看