java(用戶端)調用 gSOAP發布的C++函數(伺服器端)

來源:互聯網
上載者:User
文章目錄
  • 建立將要發布的c++標頭檔(calc.h)
  • 通過標頭檔產生相應的檔案
  • 將gsoap_win32_2.7.6c.zip中的soapcpp2.exe拷貝至標頭檔(calc.h)所在的檔案夾目錄下,並在命令列中執行:soappcpp2.exe calc.h
  • 將產生下面的檔案:
  • 通過vc++ 6.0編譯代碼
  • 建立項目(wt_pro_proj)
  • 將剛才產生的檔案以及gsoap_win32_2.7.6c.zip中的stdsoap2.h和stdsoap2.cpp拷貝至此項目的根目錄下:
  • 將圖示中的檔案添加至項目中:
  • 添加wsock32.lib至項目中:
  • soapC.cpp、soapServer.cpp、stdsoap2.cpp不使用先行編譯
  • 建立標頭檔(calc.h)的實現源檔案calcServer.cpp
  • 編譯成功後,將在此項目的Debug目錄下產生一個以項目名稱命名的可執行檔(wt_pro_proj.exe)
  • 通過在命令列中執行wt_pro_proj.exe  9000,發布c++的服務。注意9000為連接埠號碼,您可以指定任意沒有被使用的連接埠號碼。
  •  
java(用戶端)調用 gSOAP發布的C++函數(伺服器端)
  1. 伺服器端
    1. 建立將要發布的c++標頭檔(calc.h)
      • //gsoap ns service name: calc  
        //gsoap ns service style: rpc
        //gsoap ns service encoding:encoded
        //gsoap ns service namespace: http://localhost/calc.wsdl
        //gsoap ns service location: http://localhost/calc.cgi
        //gsoap ns schema namespace: urn:calc
        int ns__add(double num1,double num2,double* sum );

      • 注意:

        • service name:提供的服務名稱

        • service style:Web Service綁定類型,對應於wsdl中的

          <binding name="calc" type="tns:calcPortType">
          <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
          <operation name="add">
            <SOAP:operation style="rpc" soapAction=""/>
            <input>
               <SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
            </input>
            <output>
               <SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
            </output>
          </operation>
          </binding>

        • service encoding:編碼格式,對應於wsdl中的<?xml version="1.0" encoding="UTF-8"?>

        • service namespace:命名空間,對應於wsdl中的targetNamespace和xmlns:tns的值

          targetNamespace="http://localhost/add.wsdl"
          xmlns:tns="http://localhost/add.wsdl"

        • service location:服務定位

          <service name="calc">
          <documentation>gSOAP 2.7.6c generated service definition</documentation>
          <port name="calc" binding="tns:calc">
            <SOAP:address location="http://localhost/calc.cgi"/>
          </port>
          </service>

           

        • schema namespace:

    2. 通過標頭檔產生相應的檔案
      • 將gsoap_win32_2.7.6c.zip中的soapcpp2.exe拷貝至標頭檔(calc.h)所在的檔案夾目錄下,並在命令列中執行:soappcpp2.exe calc.h
        • 將產生下面的檔案:
        •  
    3. 通過vc++ 6.0編譯代碼
      1. 建立項目(wt_pro_proj)
      2. 將剛才產生的檔案以及gsoap_win32_2.7.6c.zip中的stdsoap2.h和stdsoap2.cpp拷貝至此項目的根目錄下:
      3. 將圖示中的檔案添加至項目中:
      4. 添加wsock32.lib至項目中:
      5. soapC.cpp、soapServer.cpp、stdsoap2.cpp不使用先行編譯
      6. 建立標頭檔(calc.h)的實現源檔案calcServer.cpp
        • #include "calc.h"
          #include "calc.nsmap"

          int main(int argc, char* argv[])
          {
              int m, s; /* master and slave sockets */
              struct soap calc_soap;
              soap_init(&calc_soap);//soap_set_namespaces(&calc_soap, add_namespaces);
              if (argc < 2)
              {
                  printf("usage: %s <server_port> \n", argv[0]);
                  exit(1);
              }
              else
              {
                  m = soap_bind(&calc_soap, NULL, atoi(argv[1]), 100);
                  if (m < 0)
                  {
                      soap_print_fault(&calc_soap, stderr);
                      exit(-1);
                  }
                  fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
                  for ( ; ; )
                  {
                      s = soap_accept(&calc_soap);
                      if (s < 0)
                      {
                          soap_print_fault(&calc_soap, stderr);
                          exit(-1);
                      }
                      fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);
                      soap_serve(&calc_soap);//該句說明該server的服務
                      soap_end(&calc_soap);
                  }
              }
              return 0;
          }
          //server端的實現函數與add.h中聲明的函數相同,但是多了一個當前的soap串連的參數
          int ns__add(struct soap *calc_soap, double num1, double num2, double *sum)
          {
              *sum = num1 + num2;
              return 0;
          }

           

      7. 編譯成功後,將在此項目的Debug目錄下產生一個以項目名稱命名的可執行檔(wt_pro_proj.exe)
      8. 通過在命令列中執行wt_pro_proj.exe  9000,發布c++的服務。注意9000為連接埠號碼,您可以指定任意沒有被使用的連接埠號碼。

        •  
      9. 測試,在瀏覽器中輸入http://localhost:9000
  2. 用戶端
    •  
  3. 1
  4. 1
  5.  
11:47 | 寫入日誌


評論 請稍候...很抱歉,您輸入的評論太長。請縮短您的評論。您沒有輸入任何內容,請重試。很抱歉,我們當前無法添加您的評論。請稍後重試。若要添加評論,需要您的家長授予您相應許可權。請求許可權您的家長禁用了評論功能。很抱歉,我們當前無法刪除您的評論。請稍後重試。 您已超過了一天之內允許提供的評論數上限。請在 24 小時後重試。因為我們的系統資料表明您可能在向其他使用者提供垃圾評論,您的帳戶已禁用了評論功能。如果您認為我們錯誤地禁用了您的帳戶,請聯絡 Windows Live 支援部門。完成下面的安全檢查,您提供評論的過程才能完成。
您在安全檢查中鍵入的字元必須與圖片或音頻中的字元一致。

若要添加評論,請使用您的 Windows Live ID 登入(如果您使用過 Hotmail、Messenger 或 Xbox LIVE,您就擁有 Windows Live ID)。登入

還沒有 Windows Live ID 嗎?請註冊

引用
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.