本文嘗試使用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 開源真是個好東西,快樂源於分享。