zoukankan      html  css  js  c++  java
  • zeromq学习记录(一)最初的简单示例使用ZMQ_REQ ZMQ_REP

    阅读zeromq guide的一些学习记录 

     zeromq官方例子 在VC下运行会有些跨平台的错误

    我这里有做修改 稍后会发布出来

    相关的代码与库 
    http://download.zeromq.org/zeromq-3.2.5.zip
    http://download.zeromq.org/czmq-1.4.0.zip
    示例代码
    https://github.com/imatix/zguide
    /**************************************************************
    技术博客
    http://www.cnblogs.com/itdef/
     
    技术交流群
    群号码:324164944
     
    欢迎c c++ windows驱动爱好者 服务器程序员沟通交流
    **************************************************************/
     

    zeromq是对对常用的网络通讯的收发、转发、订阅、推送等模式在socket底层通讯进行封装。

    指南页面 http://zguide.zeromq.org/page:all

    首先是最简单的一对一收发模式

    socket在代码中标记为ZMQ_REQ ZMQ_REP 

    ZMQ_REQ 由客户端使用 用来发送请求和收取服务器的回复。此种标记仅允许发送请求并紧跟接受回复的处理序列模式

    ZMQ_REP 由服务器使用 用来接受请求并且发送给与客户端的回复。此种标记仅允许接受请求并紧跟发送回复的处理序列模式

    代码如下:

    // hwserver.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <zmq.h>
    #include <string.h>
    
    int main()
    {
        void* context = zmq_ctx_new();
        void* responder = zmq_socket(context, ZMQ_REP);
        zmq_bind(responder, "tcp://*:5555");
    
        while (1)
        {
            zmq_msg_t request;
            zmq_msg_init(&request);
            zmq_msg_recv(&request,responder,0);
            printf("received Hello\n");
            zmq_msg_close(&request);
    
            Sleep(1);
            zmq_msg_t reply;
            zmq_msg_init_size(&reply, 5);
            memcpy(zmq_msg_data(&reply), "World", 5);
            zmq_msg_send(&reply, responder, 0);
            zmq_msg_close(&reply);
        }
        // should not arrive here
        zmq_close(responder);
        zmq_ctx_destroy(context);
        return 0;
    }
    View Code
    // hwclient_c.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include <zmq.h>
    #include <string.h>
    
    int main()
    {
        void* context = zmq_ctx_new();
    
        printf("Connecting to hello world server...\n");
    
        void* requester = zmq_socket(context, ZMQ_REQ);
        zmq_connect(requester, "tcp://localhost:5555");
    
        int request_nbr;
        for (request_nbr = 0; request_nbr != 10; request_nbr++) {
            char buffer[10];
            printf("Sending Hello %d…\n", request_nbr);
            zmq_send(requester, "Hello", 5, 0);
            zmq_recv(requester, buffer, 10, 0);
            printf("Received World %d\n", request_nbr);
        }
        zmq_close(requester);
        zmq_ctx_destroy(context);
    
    
        return 0;
    }
    View Code

    关于zeromq的消息字符串需要注意以下地方

    仅仅传输字符串的文字部分而没有c语言用来结尾的'\0'

    字符串结构如图

  • 相关阅读:
    codeforces 368B
    codeforces 651A
    codeforces 651B
    codeforces 732B
    codeforces 313B
    codeforces 550A
    codeforces 498B
    Linux C/C++基础——内存分区
    Linux C/C++基础——变量作用域
    Linux C/C++基础——Windows远程登录Linux
  • 原文地址:https://www.cnblogs.com/itdef/p/5344127.html
Copyright © 2011-2022 走看看