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可以看到效果如下。

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

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

总结一下吧

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

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

你可能感兴趣的:(zeromq)