• C使用zeromq完成有意义的通讯


    本文尝试使用zeromq完成一项简单的网络传送任务。

    小白使用开源共享库 (C使用zeromq) 该篇已经完成了一个简单的可运行的基本程序,本篇基于此改造而来)

    main.c修改后的内容如下:

    #include "zhelpers.h"
    
    int main (void)
    {
        void *context = zmq_init (1);
    
       //  Socket to talk to clients
        void *responder = zmq_socket (context, ZMQ_REP);
        zmq_bind(responder, "tcp://*:5559");
    
        while (1) {
            //  Wait for next request from client
            char *string = s_recv (responder);
            printf ("Received request: [%s]\n", string);
            free (string);
    
            //  Do some 'work'
            sleep (1);
    
            //  Send reply back to client
            s_send (responder, "World");
        }
        //  We never get here but clean up anyhow
        zmq_close(responder);
        zmq_term(context);
        return 0;
    }

    当然我们还需要一个client.c来充当客户端,main.c同级目录下新建client.c。相同的道理,把client的编译信息也加进Makefile

    //
    //  Hello World client
    //  Connects REQ socket to tcp://localhost:5559
    //  Sends "Hello" to server, expects "World" back
    //
    #include "zhelpers.h"
    
    int main (void)
    {
        void *context = zmq_init (1);
    
        //  Socket to talk to server
        void *requester = zmq_socket (context, ZMQ_REQ);
        zmq_connect (requester, "tcp://localhost:5559");
    
        int request_nbr;
        for (request_nbr = 0; request_nbr != 10; request_nbr++) {
            s_send (requester, "Hello");
            char *string = s_recv (requester);
            printf ("Received reply %d [%s]\n", request_nbr, string);
            free (string);
        }
        zmq_close (requester);
        zmq_term (context);
        return 0;
    }

    这是zeromq官网上找到的代码,原来可能有点小小的问题,经过稍加改造可以顺利运行。原文在这里 

    https://github.com/imatix/zguide/blob/master/examples/C/rrserver.c

    https://github.com/imatix/zguide/blob/master/examples/C/rrclient.c

    注意程序中用到了一个zhelpers.h头文件,那个文件在官网上也是有的。有需要的话,不妨自己找找看 ^_^。

    纹丝不动拷贝到include 中,回到app一个make搞定。

    启动两个putty,一个跑main另一个跑client可以看到效果如下。

    总结一下吧

    1 短短的几行代码就能完成基本的socket通讯,zmq的强大已经有所体现。

    2 开源真是个好东西,快乐源于分享。

  • 相关阅读:
    Docker的历史
    IP路由基础
    Docker的基础知识(二)
    Docker的基础知识(一)
    CentOS7下安装部署“zabbix”
    使用amoeba实现mysql读写分离
    ?? 运算符(C# 参考)
    ?? 运算符(C# 参考)
    knockout,change事件
    knockout,change事件
  • 原文地址:https://www.cnblogs.com/jogger/p/2549814.html
Copyright © 2020-2023  润新知