乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      ONVIF協(xié)議網(wǎng)絡攝像機

       ~海龍~ 2019-03-11


      96 
      bobociel 關(guān)注
      2017.08.01 11:21* 字數(shù) 1981 閱讀 1186評論 0喜歡 0
      logo.PNG

      來源:CSDN

      一 使用IPC攝像頭

      1. IPC攝像頭接入有線網(wǎng)絡,PC也接入有線網(wǎng)絡,保證IPC和PC在同一局域網(wǎng)。(保證ip的前三部分相同。)
      2. 下載IP Camera獲得ONVIF Device Test Tool 來搜索攝像頭信息。
      3. 在PC瀏覽器中輸入IPC的ip地址和端口,輸入賬戶名和密碼進入網(wǎng)絡攝像機控制臺。 可以設(shè)置IPC無線連接信息,IPC錄制視頻信息等。

      二 理解Web Service和ONVIF

      Web Service是基于網(wǎng)絡的、分布式的模塊化組件,它執(zhí)行特定的任務,遵守具體的技術(shù)規(guī)范,這些規(guī)范使得Web Service能與其他兼容的組件進行互操作

      ONVIF(Open Network Video Interface Forum,開放型網(wǎng)絡視頻接口論壇)ONVIF規(guī)范描述了網(wǎng)絡視頻的模型、接口、數(shù)據(jù)類型以及數(shù)據(jù)交互的模式。并復用了一些現(xiàn)有的標準,如WS系列標準等。ONVIF規(guī)范的目標是實現(xiàn)一個網(wǎng)絡視頻框架協(xié)議,使不同廠商所生產(chǎn)的網(wǎng)絡視頻產(chǎn)品(包括攝錄前端、錄像設(shè)備等)完全互通。  
      ONVIF規(guī)范中設(shè)備管理和控制部分所定義的接口均以Web Services 的形式提供。

      ONVIF規(guī)范的內(nèi)容結(jié)構(gòu):
      [圖片上傳失敗...(image-c8512e-1534605862114)]

      ONVIF規(guī)范的網(wǎng)絡層次結(jié)構(gòu):


      ONVIF接口被劃分為不同模塊,包括:設(shè)備發(fā)現(xiàn)、設(shè)備管理、設(shè)備輸入輸出服務、圖像配置、媒體配置、實時流媒體、接收端配置、顯示服務、事件處理、PTZ控制等。

      SOAP介紹

      三 使用gSOAP生成Web Service框架

      ONVIF標準是使用SOAP方式實現(xiàn)的Web Services,上一章介紹了Web Services,涉及到很多概念,包括SOAP,HTML,XML,RPC等很多東西。開發(fā)時我們可以使用gSOAP自動生成大部分代碼框架,而不需要自己造輪子。
      這樣的工具有:
      1, gSOAP工具,適用于C/C++語言開發(fā)。
      2, Apache CXF工具,適用于JAVA語言開發(fā)。

      1, gSOAP簡介

      gSOAP官網(wǎng):http://www.cs./~engelen/soap.html
      gSOAP源碼下載地址:http:///projects/gsoap2

      gSOAP編譯工具提供了一個SOAP關(guān)于C/C++語言的實現(xiàn),從而讓C/C++語言開發(fā)Web Service服務器或客戶端程序的工作變得輕松很多。

      gSOAP會生成哪些框架代碼,下圖中綠色的部分就是自動生成的代碼。
      [圖片上傳失敗...(image-5f872a-1534605862114)]

      2, gSOAP工具轉(zhuǎn)換原理

      gSOAP工具根據(jù)WSDL文檔,自動生成C/C++語言的客戶端/服務器框架代碼。這其中有兩個重要的工具,wsdl2h和soapcpp2。wsdl2h工具根據(jù)WSDL文檔生成C/C++頭文件,而soapcpp2工具是根據(jù)該頭文件生成C/C++的框架代碼。

      gSOAP工具可以在Windows、Linux和MaxOSX操作系統(tǒng)下運行,gSOAP工具包中自帶有Windows和MaxOSX操作系統(tǒng)的wsdl2h和soapcpp2可執(zhí)行文件,而Linux操作系統(tǒng)得自己編譯。

      [圖片上傳失敗...(image-8797d8-1534605862114)]

      如何使用gSOAP,在gSOAP官網(wǎng),或者在工具包gsoap\doc\soapdoc2.pdf文檔中都有很詳細的說明,大家可以參考。下面我們通過【國內(nèi)手機號碼歸屬地查詢】的例子,來演示如何使用gSOAP工具。

      3, 手機號碼歸屬地查詢

      國內(nèi)手機號碼歸屬地查詢 免費WEB服務:
      WEB服務地址: http://ws./WebServices/MobileCodeWS.asmx
      WSDL: http://ws./WebServices/MobileCodeWS.asmx?wsdl

      (1) 下載gSOAP工具。
      (2) 創(chuàng)建MobileCode,從gSOAP工具中拷貝如下文件到文件夾MobileCode文件夾

      gsoap_2.8.45\gsoap-2.8\gsoap\bin\win32\soapcpp2.exe
      gsoap_2.8.45\gsoap-2.8\gsoap\bin\win32\wsdl2h.exe
      gsoap_2.8.45\gsoap-2.8\gsoap\stdsoap2.c
      gsoap_2.8.45\gsoap-2.8\gsoap\stdsoap2.h
      gsoap_2.8.45\gsoap-2.8\gsoap\typemap.dat
      gsoap_2.8.45\gsoap-2.8\gsoap\importgsoap_2.8.45\gsoap-2.8\gsoap\custom

      (3) 啟動cmd.exe,進入MobileCode目錄。
      (4) 使用wsdl2h工具,根據(jù)WSDL產(chǎn)生頭文件,在cmd中執(zhí)行以下命令:

      wsdl2h.exe -o mobilecode.h -c -s -t typemap.dat http://ws./WebServices/MobileCodeWS.asmx?wsdl
      

      其中-c為產(chǎn)生純c代碼,默認生成c++代碼;-s為不使用STL庫,-t為typemap.dat的標識。詳情可通過wsdl2h.exe -help查看幫助。這里的WSDL文件,可以在wsdl2h命令中在線下載,也可以先下載到本地,然后引用本地WSDL文件。
      (5) 使用soapcpp2工具,根據(jù)頭文件產(chǎn)生框架代碼,在cmd中命令如下:

      soapcpp2.exe -2 -C -c -x -Iimport -Icustom mobilecode.h
      

      -2為生成SOAP 1.2版本代碼, -C為僅生成客戶端代碼,-c為生成C語言代碼。詳情可使用soapcpp2.exe -help查看幫助。
      (6) 自動生成的源碼文件如下圖所示
      [圖片上傳失敗...(image-6717eb-1534605862114)]

      其中custom, import, wsdl2h.exe, soapcpp2.exe, typemap.dat, mobilecode.h, soapClientLib.c這些文件已經(jīng)沒用了,可以刪掉,剩下的文件有:
      [圖片上傳失敗...(image-143fac-1534605862114)]
      在soapStub.h文件中,列出了[國內(nèi)手機號碼歸屬地查詢] WEB服務的所有接口(Client-Side Call Stub Functions), 我們的應用程序通過調(diào)用這些接口就成了,值域SOAP協(xié)議整個過程怎么實現(xiàn)的,都在soapC.c和soapClient.c中,有興趣的可以去研究。至少懂得調(diào)用一下接口:
      [圖片上傳失敗...(image-477684-1534605862114)]

      (7) 接下來,寫個mian.c,通過soap_call_ns1_getMobileCodeInfo接口來查詢國內(nèi)手機號碼歸屬地信息,并將其打印出來,源碼如下所示:

      #include <stdio.h>
          #include <stdlib.h>
          #include <string.h>
          #include "soapStub.h"
          #include "MobileCodeWSSoap.nsmap"
      
          void getMobileCodeInfo(char *mobileCode)
          {
              struct soap *soap = NULL;
              const char  *endpoint = "http://ws./WebServices/MobileCodeWS.asmx";
              struct _ns1__getMobileCodeInfo          req;
              struct _ns1__getMobileCodeInfoResponse  resp;
      
              soap = soap_new();                                                          // allocate and initalize a context
      
              soap_set_mode(soap, SOAP_C_UTFSTRING);                                      // support multibyte string(for Chinese)
      
              memset(&req, 0x00, sizeof(req));
              req.mobileCode = mobileCode;
              req.userID     = NULL;
      
              if(SOAP_OK == soap_call___ns1__getMobileCodeInfo(soap, endpoint, NULL, &req, &resp)) {
                  if (NULL != resp.getMobileCodeInfoResult) {
                      printf("%s\n", resp.getMobileCodeInfoResult);
                  }
              }
      
              soap_destroy(soap);                                                         // delete deserialized objects
              soap_end(soap);                                                             // delete allocated data
              soap_free(soap);                                                            // free the soap struct context data
          }
      
          int main(int argc, char **argv)
          {
              if (argc < 2) {
                  return 0;
              }
              getMobileCodeInfo(argv[1]);
      
              return 0;
          }
      

      執(zhí)行代碼會出現(xiàn)亂碼,這是由于WEB服務應答的歸屬地信息中包含有UTF-8格式的中文導致的。SOAP協(xié)議采用HTTP傳輸協(xié)議+XML數(shù)據(jù)格式,規(guī)定XML字符編碼格式必須是UTF-8。為了解決這個問題:
      ① 在源碼匯中加入soap_set_mode(soap,SOAP_C_UTFSTRING)語句,告知gSOAP底層代碼,我們上層傳入的字符編碼格式是UTF-8,內(nèi)部就不參與轉(zhuǎn)碼的過程,WEB服務器應答的UTF-8字符也都直接傳給上層,此時我們的main.c代碼收到的應答也是UTF-8格式的數(shù)據(jù)。
      ② md.exe環(huán)境默認的環(huán)境是「簡體中文GBK」,通過chcp命令就能查到,「活動代碼頁936」代表的就是「簡體中文GBK」,在這種環(huán)境下打印UTF-8中文字符當然會亂碼,使用命令chcp 65001將控制臺的字符集改為UTF-8,「活動代碼頁65001」代表的就是UTF-8,如此就不會亂碼了。

      亂碼問題,這個例子還算是簡單的,僅僅是服務器應答的時候帶有UTF-8格式的中文字符,從控制臺輸入的字符(手機號碼)是純數(shù)字的,沒有涉及到UTF-8編碼問題。如果輸入也帶有中文,那情況會更復雜,有關(guān)這方面的詳細情況,可參考我博客中此前寫的一篇文章「淺談C/C++編程中的字符編碼轉(zhuǎn)換」。

      總結(jié)

      對本文做個總結(jié):
      開發(fā)基于SOAP方式的Web Services,不需要自己實現(xiàn)代碼框架,有諸如gSOAP、Apache CXF這樣的工具會幫我們實現(xiàn)。

      [圖片上傳失敗...(image-2e233f-1534605862114)]

      以「國內(nèi)手機號碼歸屬地查詢」為例,重點介紹了gSOAP工具轉(zhuǎn)換原理,及其使用方法。

      還遇到了SOAP協(xié)議中UTF-8中文字符打印到控制臺會亂碼的問題,并給出了解決方法。

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
        轉(zhuǎn)藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多