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

最近在研究Zero的使用。ios

我在網上找了一下,發覺大部分博客都寫得亂七八糟,又不寫明什麼版本,什麼系統下的,我都不知道怎麼樣才能弄出個編譯過的程序來,只好本身摸索了。windows

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

使用前你要對windows下動態庫的使用有個基本瞭解。個人上一篇博客有講,但有點亂,有時間再改一改。socket

這裏我是用了動態庫的隱式鏈接,須要動態庫的 動態庫文件".dll" , 動態庫的LIB文件".lib" , 動態庫的函數引入聲明 "zmq.h" 和 "zmq_utils.h" 中有了(實現方式應該是我上篇博客末尾中的 "預編譯開關切換類的導入導出定義");
tcp

本篇要試的是請求--迴應模式:函數

                                                                    

 

使用步驟:測試

  1.Zmq動態庫的獲取:spa

  首先先下載 Zeromq 下來:http://zeromq.org/area:download,點擊」Windows installers",下完安裝。調試

  

 

  安裝完成後,在安裝目錄   C:\Program Files\ZeroMQ 4.0.4 下面,你能找到剛剛的4個文件:code

     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;
}

      這是 REP/REQ 請求/迴應模式的嘗試,這種模式必須同時有  recv 和 send,具體會在下一篇講。

相關文章
相關標籤/搜索