1. 程式人生 > >20160421 VC++6.0環境下gSOAP的使用

20160421 VC++6.0環境下gSOAP的使用

一、gSOAP簡介

gSOAP編譯工具提供了一個SOAP/XML 關於C/C++ 語言的實現,從而讓C/C++語言開發web服務或客戶端程式的工作變得輕鬆了很多。絕大多數的C++web服務工具包提供一組API函式類庫來處理特定的SOAP資料結構,這樣就使得使用者必須改變程式結構來適應相關的類庫。與之相反,gSOAP利用編譯器技術提供了一組透明化的SOAP API,並將與開發無關的SOAP實現細節相關的內容對使用者隱藏起來。

二、gSOAP下載地址

下載下來解壓以後資料夾如下:

其中gsoap中的兩個檔案:

以及如下路徑兩個檔案複製出來放到一個資料夾下,稍後有用:

拷出來以後總共是如下四個檔案:

三、實現簡單加法例項

基本功能:實現一個簡單的a+b程式,在伺服器端寫一個程式,裡面包含了a+b的函式,
然後通過客戶端程式碼向其傳送兩個數字,在伺服器運算得到結果返回給客戶端顯示出來。

1、新建一個資料夾server;
2、將gSoap解壓出來後的四個檔案放到server裡面;
3、在server資料夾下建立一個add.h的標頭檔案,程式碼如下:

<span style="font-size:18px;">//gsoap ns service name: add
//gsoap ns service namespace: http://localhost/add.wsdl
//gsoap ns service location: http://localhost
//gsoap ns service executable: add.cgi
//gsoap ns service encoding: encoded
//gsoap ns schema namespace: urn:add

int ns__add(int num1, int num2, int* sum);</span>

函式返回值必須是int,然後跟"ns__"(兩個下劃線),最後一個引數必須是引用型別或者指標型別(需要將值傳出來)。

4、執行cmd跳到server資料夾,輸入命令soapcpp2.exe add.h後,該資料夾顯示如下(拷貝一份出來用於後面client):


5、用VC6.0新建一個Win32控制檯應用程式(Empty),名字為server(我前面的server資料夾得路徑為D:/add/server,那麼這個時候建立的工程路徑為D:/add/,名字為server),在工程下面新建一個addserver.cpp的原始檔,原始檔中的程式碼如下:

<span style="font-size:18px;">#include <stdio.h>
#include <stdlib.h>
#include "stdsoap2.h"
#include "add.h"
#include "add.nsmap"
#include "windows.h"
int main(int argc, char* argv[]) 
{
	int m, s;
	struct soap add_soap;
	soap_init(&add_soap);
	//soap_set_namespaces(&add_soap, add_namespaces);
	if (argc < 2) 
	{
		printf("usage: %s <server_port> \n", argv[0]);
		exit(1);
	}
	else
	{
		m = soap_bind(&add_soap, NULL, atoi(argv[1]), 100); 
		if (m < 0)
		{
			soap_print_fault(&add_soap, stderr);
			exit(-1);
		}
		fprintf(stderr, "Socket connection successful: master socket = %d\n", m); 
		for ( ; ; )
		{
			s = soap_accept(&add_soap);
			if (s < 0)
			{
				soap_print_fault(&add_soap, stderr);
				exit(-1);
			}
			fprintf(stderr, "Socket connection successful: slave socket = %d\n", s); 
			soap_serve(&add_soap);//該句說明該server的服務
			soap_end(&add_soap); 
		}
	}
	return 0;
}

//server端的實現函式與add.h中宣告的函式相同,但是多了一個當前的soap連線的引數

int ns__add(struct soap *add_soap, int num1, int num2, int *sum)
{
	*sum = num1 + num2;
	return 0;
}</span>

6、新增其他檔案有7個add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapServer.cpp、stdsoap2.cpp,

在project-setting中將新增進來的3個原始檔的C/C++選項的Category設定為Precompiled Headers(只要改一個其他都改了):

7、在project-setting-Link在Object/library modules後新增一個wsock32.lib:


8、編譯,如果這個時候有編譯錯誤,估計是檔案新增和add.h生成程式碼這兩步有錯誤,如果是“sockaddr_storage未定義”,那麼可以自己在上面新增如下程式碼(新增在巨集下面):

<span style="font-size:18px;">struct sockaddr_storage {
 u_char sa_len;
 u_char sa_family;
 u_char padding[128];
 };</span>

到此應該沒有大的錯誤了,如果還有,那麼可以定位到那句話,將它註釋掉(一般可以這麼做)。
 如果編譯成功後,在Debug資料夾裡面會有一個server.exe的檔案,
開啟cmd,轉到Debug檔案下,輸入server.exe 4567,接著在IE中輸入
http://localhost:4567

,如果顯示xml頁面,說明程式已經啟動。

9、客戶端程式碼編寫,步驟與server類似,新建一個client資料夾,上面第4步為止的所有檔案拷貝到client資料夾中,接著建立一個Win32控制檯應用程式,名字為client(我前面的client資料夾的路徑為D:/add/client那麼這個時候建立的工程路徑為D:/add/,名字為client),在工程下面新建一個addclient.cpp的原始檔,原始檔中的程式碼如下:

#include <stdio.h>
#include <stdlib.h>
#include "stdsoap2.h"
#include "soapH.h"
#include "add.nsmap"

int add(const char* server, int num1, int num2, int *sum); 

int main(int argc, char **argv)
{
	int result = -1; 
	char* server="http://localhost:4567";
	int num1 = 0;
	int num2 = 0;
	int sum = 0;
	if( argc < 3 )
	{
		printf("usage: %s num1 num2 \n", argv[0]);
		exit(0);
	}
	num1 = atoi(argv[1]);
	num2 = atoi(argv[2]);
	result = add(server, num1, num2, &sum);
	if (result != 0)
	{
		printf("soap err,errcode = %d\n", result);
	}
	else
	{
		printf("%d+%d=%d\n", num1, num2, sum );
	}
	return 0;
}

int add(const char* server, int num1, int num2, int *sum)
{
	struct soap add_soap;
	int result = 0;
	soap_init(&add_soap);
	// soap_set_namespaces(&add_soap, add_namespaces);
	//該函式是客戶端呼叫的主要函式,後面幾個引數和add.h中宣告的一樣,前面多了3個引數,函式名是介面函式名ns__add前面加上
	
	//soap_call_ 
		soap_call_ns__add( &add_soap, server, "", num1, num2, sum );
	if(add_soap.error)
	{
		printf("soap error:%d,%s,%s\n", add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );
		result = add_soap.error;
	}
	
	soap_end(&add_soap);
	soap_done(&add_soap);
	return result;
}

10、新增其他檔案有7個add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapClinet.cpp、stdsoap2.cpp,在project-setting中將新增進來的3個原始檔的C/C++選項的Category設定為Precompiled Headers(和server不同的是一個新增soapServer.cpp檔案而另一個是新增soapClient.cpp檔案);
11、在project-setting-Link在Object/library modules後新增一個wsock32.lib,之後編譯,編譯成功後在Debug資料夾下會有一個
client.exe檔案;
12、執行一個cmd跳到server/Debug下輸入 server.exe 4567
13、執行另一個cmd跳到client/Debug下輸入 client.exe 1 2
這個時候就會出現了1+2=3
14、如果server.exe與client.exe兩個檔案在兩臺不同的電腦上,那麼將client.exe的程式碼char* server="
http://localhost:4567";那行將localhost改為伺服器的ip地址再重新編譯即可(addclient.cpp中)。



 

相關推薦

20160421 VC++6.0環境gSOAP的使用

一、gSOAP簡介 gSOAP編譯工具提供了一個SOAP/XML 關於C/C++ 語言的實現,從而讓C/C++語言開發web服務或客戶端程式的工作變得輕鬆了很多。絕大多數的C++web服務工具包提供一組API函式類庫來處理特定的SOAP資料結構,這樣就使得使用者必須改變程式

如何在VC++6.0環境刪除新增的工程類

在自己的建立的工程下如果添加了一個類,而又不想要在其中工程用使用它。那麼 1.先在工程資料夾下刪除該類的.CPP和.h檔案 2.刪除.clw檔案 3.開啟工程,在檔案檢視下,選中該類的標頭檔案和原始檔,Delete it 4.開啟建立類嚮導,會提示你建立.clw檔案,那麼就

Windows平臺VC++ 6.0 的網絡編程學習 - 簡單的測試winsock.h頭文件

有關 tle 數據結構 inf app unsigned failed 錯誤處理 tcp 最近學習數據結構和算法學得有點累了(貌似也沒那麽累...)...找了本網絡編程翻了翻當做打一個小基礎吧,打算一邊繼續學習數據結構一邊也看看網絡編程相關的...

VC++6.0用60行程式寫成一個最簡單的WEB伺服器

文章目錄 一個最簡單的WEB伺服器 HTTP 工作原理概述 HTTP協議通訊過程 源程式分析 過程 原始碼分析 原始碼60行(simplehttpserver.cpp) 編碼過程和

VC++6.0基於MFC框架利用CInternetSession和CHttpFile獲取網頁資料(附程式碼)

例:從網站http://qq.ip138.com/weather/guangdong/GuangZhou.htm獲取近三天的日期、天氣、溫度、風向,程式碼如下: //新增標頭檔案 #include <afxinet.h> //獲取網路資料 void CSensorSysDlg:

VC++6.0MFC ODBC連結SQL Server2008

開啟控制面板 搜尋ODBC 開啟設定資料來源(ODBC) 選擇 系統DNS 新增要使用的資料庫    點完成  開始配置: 填好名稱後 選擇使用者 下一步  這一步 要更改預設資料庫 給√點上  選擇你的要使用的表所在的資料庫 然

vc++6.0搭建QT開發環境

**無論是vc還是vs那都是執行在windows平臺的,所有linux平臺的就沒有必要往下閱讀了 開發前的準備: 1、下載並安裝vc++6.0(需要完整版,綠色版不行) 2、下載qt原始碼 3、將qt原始碼解壓放在你習慣的目錄下(下面的例子我全是用“C:/Qt/4.5.3”目錄舉例,

VC++6.0初步使用SQLite3

從網上下載的一般都是SQLite3.dll和SQLite3.def檔案,而在VC++6.0下還需要使用.lib檔案。 所以,我們首先需要自己生成.lib檔案。 生成的方法是: 第一步:找到LIB.EXE所在目錄 一般都在C:/Program Files/Microsoft

詳解win7安裝VC++6.0和MSDN

筆者電腦上安裝的64位win7系統,如果讀者不知道如何安裝作業系統,可以先研讀筆者之前發表的文章 好,假設讀者已經安裝好作業系統了,那麼Let't go! 第一步,下載安裝包,包括vc++6.0的安裝包和MSDN的安裝包 MSDN 密碼:inue 第二步,將下載的檔案分

使用VC++ 6.0開發WebService(gsoap

最開始以為需要使用C#,或是VC++.net才能方便的開發WebService,後面在網上找到了gsoap,的確是一個好工具,使用VC++6.0也可以開發WebService了。 開發的過程非常的簡單,首先定義好WebService所需要提供的介面(或是服務),其實就是一

ucos_ii VC++ 6.0開發環境建立

1. 現在檔案下建立目錄,如下: ucos_ii/v2.80: platform/win32: app: includes: 2. 建立VC++ 6.0工程 3. 匯入程式碼到VC++ 6.0工程中 4. 修改VC++ 6.0配置 匯入環

[轉]ARToolKit的安裝配置及例子演示(WindowsXP,VC++6.0開發環境)

1.ARToolKit下載和安裝。 下載以下的3個檔案。       ARToolkit-2.71.2.tgz  (988KB)        DSVL-0.0.8b.zip  (2.57MB)        OpenVRML-0.14.3-win32.zip  (1

驅動開發環境之Windows XP DDK2600,VC++ 6.0, Driver Studio 3.2

神祕的驅動開發,神祕的WINDOWS核心,是什麼把這些搞得這麼神祕呢? 搭Windows驅動開發平臺就搭了兩天,歷經各種找不到,搞不通。我還是學計算機這麼多年的的,各種找算是很會的人了,所以啊,我想很多初學者或許在搭開發平臺這一關就被磨卻了信心與興趣了。 怪不得這麼神祕! 現在把這兩天的經驗總結下,或許可供

【甘道夫】Ubuntu14 server + Hadoop2.2.0環境Sqoop1.99.3部署記錄

tool share 環境變量 解壓 gdi yar base soft mil 第一步。下載、解壓、配置環境變量: 官網下載sqoop1.99.3 http://mirrors.cnnic.cn/apache/sqoop/1.99.3/ 將sqoop解

VC++6.0不能顯示MSDN解決的方法

++ mil 嘗試 搜索 能夠 body svr3 宋體 div 1、搜索看系統是否有Vshelp.dll文件。沒有則去站點下載一個 2、若是32位操作系統直接將下載的文件放在C:\Windows\System32 若是64位操作系統則放在C:\Windo

vs2015和VC++6.0中while (scanf("%d", &x) != EOF)輸入如何結束

.cn 完數 .com 輸入 如何 blog www vc++ -a vs2015和VC++6.0中while (scanf("%d", &x) != EOF)輸入如何結束 VS2015中:    解決方案:輸完數據->回車->ctrl+z->回車

vc 6.0的安裝問題

vcvc 6.0安裝只需要 下載好壓縮包解壓後,在E:\vc++6.0\Common\MSDev98\Bin目錄下找到MSDEV然後隨意改個名字叫MSDEV1然後點擊它右鍵找到屬性,找到兼容性選擇修改兼容模式為:Windows XP(Service Pack 3),確定。然後可以將發送快捷方式到桌面,也可以直

《呂鑫:VC++6.0就業培訓寶典之MFC視頻教程》學習筆記 -- 第二章 MFC原理介紹

第一個 寶典 數據類型 對話 視頻 資源管理 bsp 程序開發 第二章 第二章 MFC原理介紹 2.1 第一個Win32軟件 2.2 Win32對話框程序開發 2.3 程序資源管理和Windows數據類型 2.4 Win32環境下的多對話框管理 2.5 初步學習MFC軟件

CentOS 6.5環境配置Arcgis Server 10.3

details 取出 install pin chown 中文 sha ima for 感覺arcgis server在Windows系統下過於消耗資源,現將其配置到linux下,僅用於學習用。文中安裝截圖較多。因水平有限,難免有不周之處,請指教。 一、安裝前準

解決win10 VC++6.0 應用程序無法正常運行 0xc0000142

綠色 nts 技術 edi -c 啟動程序 vc++ tieba 文件的 廢話不多說,無法正常運行原因就是win10不兼容中文版的vc,解決方法就是一句話,用英文版的msdev.exe替換中文版的msdev.exe,msdev.exe是vc的啟動程序。直接上來教你怎