ZeroMQ實例-使用ZMQ(ZeroMQ)進行局域網內網絡通訊

本文內容摘要:1)安裝zeromq、2)實例說明使用zmq進行網絡間的消息發送和接收html

首先在機器中安裝zmq庫網絡

步驟以下:socket

1)下載zeromq的源代碼,ZeroMQ的官方網址:http://zeromq.org/    tcp

    百度網盤的下載地址 : http://pan.baidu.com/s/1mg61em0 函數

    ZMQ API 的 百度網盤 下載地址 : http://pan.baidu.com/s/1jGDqXfSspa

    :在本文寫做時,ZMQ版本已經升級到4.1.0,不過影響沒多大設計

2)解壓源文件3d

tar zxf zeromq-4.0.3.tar.gz

3)code

 3.1進入zmq目錄並進行編譯和安裝htm

cd zeromq-4.0.3

 3.2執行配置文件

./configure

 3.3 進行編譯

make

 3.4 安裝zmq

make install

4)如今開始使用zmq進行網絡通訊

 4.1接收端代碼

 1 //包含zmq的頭文件 
 2 #include <zmq.h>
 3 #include "stdio.h"
 4 
 5 int main(int argc, char * argv[])
 6 {
 7     void * pCtx = NULL;
 8     void * pSock = NULL;
 9     const char * pAddr = "tcp://*:7766";
10 
11     //建立context,zmq的socket 須要在context上進行建立 
12     if((pCtx = zmq_ctx_new()) == NULL)
13     {
14         return 0;
15     }
16     //建立zmq socket ,socket目前有6中屬性 ,這裏使用dealer方式
17     //具體使用方式請參考zmq官方文檔(zmq手冊) 
18     if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL)
19     {
20         zmq_ctx_destroy(pCtx);
21         return 0;
22     }
23     int iRcvTimeout = 5000;// millsecond
24     //設置zmq的接收超時時間爲5秒 
25     if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iRcvTimeout, sizeof(iRcvTimeout)) < 0)
26     {
27         zmq_close(pSock);
28         zmq_ctx_destroy(pCtx);
29         return 0;
30     }
31     //綁定地址 tcp://*:7766 
32     //也就是使用tcp協議進行通訊,使用網絡端口 7766
33     if(zmq_bind(pSock, pAddr) < 0)
34     {
35         zmq_close(pSock);
36         zmq_ctx_destroy(pCtx);
37         return 0;
38     }
39     printf("bind at : %s\n", pAddr);
40     while(1)
41     {
42         char szMsg[1024] = {0};
43         printf("waitting...\n");
44         errno = 0;
45         //循環等待接收到來的消息,當超過5秒沒有接到消息時,
46         //zmq_recv函數返回錯誤信息 ,並使用zmq_strerror函數進行錯誤定位 
47         if(zmq_recv(pSock, szMsg, sizeof(szMsg), 0) < 0)
48         {
49             printf("error = %s\n", zmq_strerror(errno));
50             continue;
51         }
52         printf("received message : %s\n", szMsg);
53     }
54 
55     return 0;
56 }

 4.2發送端代碼

 1 //包含zmq的頭文件 
 2 #include <zmq.h>
 3 #include "stdio.h"
 4 
 5 int main(int argc, char * argv[])
 6 {
 7     void * pCtx = NULL;
 8     void * pSock = NULL;
 9     //使用tcp協議進行通訊,須要鏈接的目標機器IP地址爲192.168.1.2
10     //通訊使用的網絡端口 爲7766 
11     const char * pAddr = "tcp://192.168.1.2:7766";
12 
13     //建立context 
14     if((pCtx = zmq_ctx_new()) == NULL)
15     {
16         return 0;
17     }
18     //建立socket 
19     if((pSock = zmq_socket(pCtx, ZMQ_DEALER)) == NULL)
20     {
21         zmq_ctx_destroy(pCtx);
22         return 0;
23     }
24     int iSndTimeout = 5000;// millsecond
25     //設置接收超時 
26     if(zmq_setsockopt(pSock, ZMQ_RCVTIMEO, &iSndTimeout, sizeof(iSndTimeout)) < 0)
27     {
28         zmq_close(pSock);
29         zmq_ctx_destroy(pCtx);
30         return 0;
31     }
32     //鏈接目標IP192.168.1.2,端口7766 
33     if(zmq_connect(pSock, pAddr) < 0)
34     {
35         zmq_close(pSock);
36         zmq_ctx_destroy(pCtx);
37         return 0;
38     }
39     //循環發送消息 
40     while(1)
41     {
42         static int i = 0;
43         char szMsg[1024] = {0};
44         snprintf(szMsg, sizeof(szMsg), "hello world : %3d", i++);
45         printf("Enter to send...\n");
46         if(zmq_send(pSock, szMsg, sizeof(szMsg), 0) < 0)
47         {
48             fprintf(stderr, "send message faild\n");
49             continue;
50         }
51         printf("send message : [%s] succeed\n", szMsg);
52         getchar();
53     }
54 
55     return 0;
56 }

5)在CentOS下編譯經過,記得要加zmq的連接庫 -lzmq

1 gcc -o recv recv.c -lzmq
2 gcc -o send send.c -lzmq

6)在機器192.168.1.2上運行recv程序,在同一個局域網的另外一臺機器(同一臺機器也能夠)上運行send程序,結果以下

 6.1接收端

 1 $ ./recv 
 2 bind at : tcp://*:7766
 3 waitting...
 4 received message : hello world :   0
 5 waitting...
 6 received message : hello world :   1
 7 waitting...
 8 received message : hello world :   2
 9 waitting...
10 received message : hello world :   3
11 waitting...
12 received message : hello world :   4
13 waitting...
14 received message : hello world :   5
15 waitting...

 6.2 發送端

 1 $ ./send 
 2 Enter to send...
 3 send message : [hello world :   0] succeed
 4 
 5 Enter to send...
 6 send message : [hello world :   1] succeed
 7 
 8 Enter to send...
 9 send message : [hello world :   2] succeed
10 
11 Enter to send...
12 send message : [hello world :   3] succeed
13 
14 Enter to send...
15 send message : [hello world :   4] succeed
16 
17 Enter to send...
18 send message : [hello world :   5] succeed

7)結束語

以上是zmq最基本的網絡通信實例,在此基礎上能夠進行更復雜的設計,寫出一些網絡聊天、文件傳輸等的網絡軟件。

如何在Windows上使用ZeroMQ請看這裏:http://www.cnblogs.com/fengbohello/p/4369082.html

 

更多 ZeroMQ API :http://www.cnblogs.com/fengbohello/p/4230135.html 

 

做者:風波

mail : fengbohello@qq.com

相關文章
相關標籤/搜索