接下來寫一個服務器端和客戶端都用C++的Demo,開發環境是VS2005。需要用到的是該目錄下的stdsoap2.cpp和stdsoap2.h兩個文件,bin/win32目錄下的soapcpp2.exe文件。這個Demo分爲Server端和Client端,以下是詳細的步驟:
[Server端]
用VS2005新建一個Win32控制檯應用程序,命名g_server,選擇空項目,其他默認即可。
添加一個server.cpp和server.h,在server.h中聲明一個函數int ns__add(int num1, int num2, int *sum);在server.cpp中添加main函數,build,ok到這一步沒啥問題。
將剛纔提到的bin/win32目錄下的soapcpp2.exe拷貝到server.h目錄下,打開cmd,進入當前目錄,敲入命令soapcpp2.exe server.h,回車:
可以看到當前目錄下生成了以下文件:
我將這些文件拷貝一份保存到bak文件夾,以防萬一改錯,可以從備份中拿最初的文件。
這些文件留取備用。
然後將剛纔提到的stdsoap2.cpp和stdsoap2.h兩個文件拷貝到源文件所在的目錄。將soapC.cpp,soapServer.cpp,stdsoap2.cpp加入到項目中,將soapH.h,soapStub.h,stdsoap2.h加入到項目中。在server.cpp中包含頭文件ns.nsmap(該文件是剛纔自動生成的一個,網上有些朋友是包含soapStub.h但是我發現這樣編譯會報錯,不知道是爲什麼)。
接下去將ns__add()函數定義完成,並編寫完main函數。Server端就完成了。
Main函數中的代碼是:
int nPort = 8080;
struct soap fun_soap;
soap_init(&fun_soap);
int nMaster = (int)soap_bind(&fun_soap, NULL, nPort, 100);
if (nMaster < 0)
{
soap_print_fault(&fun_soap, stderr);
exit(-1);
}
fprintf(stderr, "Socket connection successful : master socket = %d\n", nMaster);
while (true)
{
int nSlave = (int)soap_accept(&fun_soap);
if (nSlave < 0)
{
soap_print_fault(&fun_soap, stderr);
exit(-1);
}
fprintf(stderr, "Socket connection successful : slave socket = %d\n", nSlave);
soap_serve(&fun_soap);
soap_end(&fun_soap);
}
說明服務已成功啓動。驗證以下,在瀏覽器中輸入http://localhost:8080,回車,如果看到
說明服務器真的成功啓動!~~~先YY開心一下。喝杯咖啡。
[Client 端]
Client端稍微簡單一點。首先打開VS2005,新建一個Win32控制檯應用程序,空項目。加入client.cpp和client.h,在client.cpp中寫main函數,build一下,ok
將剛纔備份的文件全部拷貝到當前項目源文件所在目錄下。
將soapH.h,soapStub.h,stdsoap2.h加入到頭文件,將soapC.cpp,soapClient.cpp,stdsoap2.cpp加入當源文件。
同樣在client.cpp中包含頭文件#include "ns.nsmap"
編寫main函數和TestAdd函數:
int TestAdd(const char* server)
{
struct soap add_soap;
int nResult = 0;
soap_init(&add_soap);
int nNum1 = 20;
int nNum2 = 10;
int nSum = 0;
soap_call_ns__add(&add_soap, server, "", nNum1, nNum2, &nSum);
if (add_soap.error)
{
soap_print_fault(&add_soap, stderr);
}
soap_end(&add_soap);
soap_done(&add_soap);
return nSum;
}
int main()
{
char* server = "http://127.0.0.1:8080";
int result = TestAdd(server);
cout << "TestAdd result=" << result << endl;
return 0;
}
最後 需要注意的一點
就是Server需要設置附加庫wsock32.lib,因爲webservice底層是用socket通訊的。
發現CSDN好像只能上傳圖片,不能上傳rar壓縮包,所以源代碼也沒辦法在這裏分享,如果有需要的,可以留下Email或者聯繫我,
我的Email: [email protected]
MSN: [email protected]
QQ: 372760564