gsoap基礎知識

2021-06-10 06:13:52 字數 2274 閱讀 5903

gsoap是乙個開源的專案,用它可以方便的使用c/c++地進行soap客戶端和伺服器端程式設計,而不必了解xml和soap協議的細節。這樣使用者就可以專注於自己的web service 客戶端或伺服器端的編寫,而不用糾纏與其它細節。我第一次接觸這些東西,我對soap的理解是這樣的:以http協議為基本的通訊協議,以xml檔案形式請求遠端服務,再以xml檔案的形式返回執行結果,我理解的就這麼簡單了,有啥不妥處,還請指教阿。

實踐一下才有理性認識,下面是我自己在windows下,具體說來就是用vc 6.0下編寫的乙個很簡單的客戶端程式呼叫遠端的服務,來傳送電子郵件,感覺很爽吧。 

首先我們到

soapcpp2.exe: gsoap編譯器,編譯標頭檔案生成伺服器和客戶端都需要的 c/c++檔案。

wsdl2h.exe: 編譯wsdl檔案生成c/c++標頭檔案。

其次,我們到

用如下命令:

wsdl2h  -o abysalemail.h abysalemail.wsdl

用如下命令:

soapcpp2  -c abysalemail.h

說明:-c  選項是只生成客戶端的,預設是生成客戶端和伺服器端的,如果你在程式中使用了vector還要加上 –limport選項。即可以生存客戶端存根程式和框架了。

soapclient.cpp:編譯客戶端的需要的存根例程。

soapc.cpp,soaph.h:用來序列化和反序列化c/c++不同資料型別。

soapserver.cpp: 編譯伺服器端的需要的存根例程。

soap***proxy.h: 生成的**類的標頭檔案,使用**類時需要此檔案。

本程式為soapsendemailbindingproxy.h。

第三步,就是在vc中建個工程,設定如下:

在vc6中建立工程,其原始檔為:sendmailclient.cpp soapc.cpp

soapclient.cpp   stdsoap2.cpp

另外在所需要的庫中把wsock32.lib加上,gsoap也是採用socket方式連線的。其中sendmailclient.cpp為我寫的客戶端程式,程式如下:

#include "soaph.h"                                      // 得到存根程式

#include "sendemailbinding.nsmap"            //得到命名空間對映表 

#include "soapsendemailbindingproxy.h"

using namespace std;

int main(int argc, char **argv)

else

return 0;

}我程式中是採用**類的方式編寫的程式,不用**類的**如下:

#include "soaph.h"                                    //  得到存根程式

#include "sendemailbinding.nsmap"            // 得到命名空間對映表

using namespace std;

int main(int argc, char **argv)

soap_destroy(&email_soap);// 刪除反序列化類的例項,僅用於c++

soap_end(&email_soap);    // 清空已經並行化的資料

soap_done(&email_soap);   // 與gsoap 環境相分離,關閉連線

if (result != 0)

else

return 0;

}你可能會問我怎麼知道遠端服務的介面阿? 到soapstub.h中去找就可以了,至於**類的使用,到**類標頭檔案中一看便知。

好了,終於要寫完了,當然我們不僅可以編寫客戶端也可以編寫伺服器端程式,至於伺服器端,有興趣的可以自己看看gsoap裡面的文件,也很簡單的,不過也要花點時間學習的了,呵呵。

如果對於上面程式,有誰沒除錯成功聯絡我,郵箱都寫在程式裡那。呵呵。

這是我很久以前寫的文章了,後來我也用gsoap寫了伺服器端和客戶端的程式,發現乙個很嚴重的問題,就是gsoap客戶端得到的結果中文顯示不出來,後來我找了大量資料,後來終於發現原來gsoap可以設定編碼的,設定方法很簡單就是 soap_set_mode(&soap, soap_c_utfstring);

soap 是struct soap型別,這樣得到的結果就是utf8型別,再進行轉換成中文格式gbk,就可以解決了.

還有乙個問題就是編譯的時候有時候會報map錯誤,我找不到解決方法,一氣直接注釋掉了那兩個出錯函式,居然也可以.

C 基礎知識整理 基礎知識(2) 類

類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...

C 基礎知識整理 基礎知識(2) 類

類,是物件導向語言的基礎。類的三大特性 封裝 繼承 多型。最基本的特性就是封裝性。程式設計師用程式描述世界,將世界的所有事物都看成物件,怎麼描述這個物件?那就是類了。也就是用類來封裝物件。用書上的話說,類是具有相同屬性和行為的物件的抽象。寶馬汽車 別克汽車 五菱之光汽車.基本具有相同的屬性和行為,所...

電腦的基礎知識 電腦的基礎知識

電腦的組成部分與其作用 一 軟體系統 軟體系統的組成分別是 作業系統 應用軟體等。其應用軟體是指特定領域開發 並為特定目的服務的一類軟體。而作業系統是位於底層硬碟與使用者之間溝通的橋梁。使用者可以通過作業系統的使用者頁面,輸入命令,實現使用者需求。二 硬體系統 硬體系統是指構成計算機的物理裝置,即由...