设为首页 加入收藏

TOP

C++笔记之【Webservice】的那些事(一)
2017-07-06 10:22:37 】 浏览:5012
Tags:笔记 Webservice 那些

一、 前言

C++笔记之【Webservice】的那些事,这里介绍一下使用C++如何实现Webservice通讯,创建一个服务端和一个客户端。使用第三方库gsoap。

二、 资料准备

功能:
实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数,然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来。


1、gSOAP官网下载
http://sourceforge.net/projects/gsoap2/files/
2、新建一个目录gsoaptest,
解压gsoap_2.8.18.zip,
将gsoap-2.8\gsoap\bin\win32下的soapcpp2.exe放到gsoaptest里面;

其中,
wsdl2h.exe的作用是根据WSDL生成C/C++风格的头 文件;
soapcpp2.exe的作用是根据头文件自动生成调用远程 SOAP服务的客户端代码(称为存根:Stub)和提供SOAP服务的框架代码(称为框架:Skeleton),另外它也能从头文件生成WSDL文件;

3、在gsoaptest目录建立一个add.h的头文件
输入下面代码:

1.//gsoapnsservicename:add
2.//gsoapnsservicenamespace:http://localhost/add.wsdl
3.//gsoapnsservicelocation:http://localhost
4.//gsoapnsserviceexecutable:add.cgi
5.//gsoapnsserviceencoding:encoded
6.//gsoapnsschemanamespace:urn:add
intns__add(intnum1,intnum2,int*sum);

4、打开cmd命令窗口,进入gsoaptest目录
输入命令soapcpp2.exe add.h
执行时的警告不用理会。
执行完命令后,目录会有下面文件
add.add.req.xml
add.add.res.xml
add.h
add.nsmap
add.wsdl
ns.xsd
soapC.cpp
soapClient.cpp
soapClientLib.cpp
soapcpp2.exe
soapH.h
soapServer.cpp
soapServerLib.cpp
soapStub.h
5、复制gsoap-2.8\gsoap目录下的下面2个文件到gsoaptest目录
stdsoap2.cpp
stdsoap2.h
6、经过以上步骤,已经产生出C/C++源代码了,接下来要创建一个服务端和客户端

三、 服务端

建立一个控制台工程,名字为server,在工程下面新建一个addserver.cpp的源文件
源代码如下:

1.#include
  
   
2.#include
   
     3.#include"stdsoap2.h" 4.#include"add.h" 5.#include"add.nsmap" 6.intmain(intargc,char*argv[]) 7.{ 8.intm,s; 9.structsoapadd_soap; 10.soap_init(&add_soap); 11.//soap_set_namespaces(&add_soap,add_namespaces); 12.if(argc<2) 13.{ 14.printf("usage:%s
    
     \n",argv[0]); 15.exit(1); 16.} 17.else 18.{ 19.m=soap_bind(&add_soap,NULL,atoi(argv[1]),100); 20.if(m<0) 21.{ 22.soap_print_fault(&add_soap,stderr); 23.exit(-1); 24.} 25.fprintf(stderr,"Socketconnectionsuccessful:mastersocket=%d\n",m); 26.while(true) 27.{ 28.s=soap_accept(&add_soap); 29.if(s<0) 30.{ 31.soap_print_fault(&add_soap,stderr); 32.exit(-1); 33.} 34.fprintf(stderr,"Socketconnectionsuccessful:slavesocket=%d\n",s); 35.soap_serve(&add_soap);//该句说明该server的服务 36.soap_end(&add_soap); 37.} 38.} 39.return0; 40.} 41. 42.//server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数 43.intns__add(structsoap*add_soap,intnum1,intnum2,int*sum) 44.{ 45.*sum=num1+num2; 46.return0; }
    
   
  

1、向server工程添加其他文件,
add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapServer.cpp、stdsoap2.cpp

2、编译工程server,如果有编译错误,修改编译错误。
我这里遇到了找不到头文件的错误。
修改如下:[属性 -> 配置属性 -> C/C++ -> 附加包含目录]添加头文件的目录
3、工程编译成功后,可以通过如下方式检测生成的服务端程序
打开cmd,进入server.exe的目录,运行server.exe 4567,
在IE中输入http://localhost:4567,如果显示xml页面,说明程序已经启动。

四、 客户端

建立一个控制台工程,名字为client,在工程下面新建一个addclient.cpp的源文件
源代码如下:

1.#include
  
   
2.#include
   
     3.#include"stdsoap2.h" 4.#include"soapH.h" 5.#include"add.nsmap" 6. 7.intadd(constchar*server,intnum1,intnum2,int*sum); 8. 9.//argv[1]:num1argv[2]:num2argv[3]:"http://localhost:4567" 10.intmain(intargc,char**argv) 11.{ 12.intresult=-1; 13.charserver[64]={0}; 14.intnum1=0; 15.intnum2=0; 16.intsum=0; 17.if(argc<4) 18.{ 19.printf("usage:%snum1num2http://localhost:4567\n",argv[0]); 20.exit(0); 21.} 22.strncpy(ser
首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇c++学习笔记------memcpy函数 下一篇C++操作符重载及实现简单的复数类..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目