文章目錄
- 建立將要發布的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++函數(伺服器端)
- 伺服器端
- 建立將要發布的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:
- 通過標頭檔產生相應的檔案
- 將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
#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;
}
- 編譯成功後,將在此項目的Debug目錄下產生一個以項目名稱命名的可執行檔(wt_pro_proj.exe)
- 通過在命令列中執行wt_pro_proj.exe 9000,發布c++的服務。注意9000為連接埠號碼,您可以指定任意沒有被使用的連接埠號碼。
- 測試,在瀏覽器中輸入http://localhost:9000
- 用戶端
- 1
- 1
-
11:47 | 寫入日誌
評論 請稍候...很抱歉,您輸入的評論太長。請縮短您的評論。您沒有輸入任何內容,請重試。很抱歉,我們當前無法添加您的評論。請稍後重試。若要添加評論,需要您的家長授予您相應許可權。請求許可權您的家長禁用了評論功能。很抱歉,我們當前無法刪除您的評論。請稍後重試。 您已超過了一天之內允許提供的評論數上限。請在 24 小時後重試。因為我們的系統資料表明您可能在向其他使用者提供垃圾評論,您的帳戶已禁用了評論功能。如果您認為我們錯誤地禁用了您的帳戶,請聯絡 Windows Live 支援部門。完成下面的安全檢查,您提供評論的過程才能完成。
您在安全檢查中鍵入的字元必須與圖片或音頻中的字元一致。
若要添加評論,請使用您的 Windows Live ID 登入(如果您使用過 Hotmail、Messenger 或 Xbox LIVE,您就擁有 Windows Live ID)。登入
還沒有 Windows Live ID 嗎?請註冊
引用