gSOAP 编写webServer

最近,刚接触到gsoap。对于我这个对web编程一无所知的人来说, 太陌生了,与之前所做领域跨度有点大。首先,在官网上下载了win32二进制安装包,尝试着完成一个简单地demo,在网上搜索了一下,关于vc下用gSOAP 编写webServer的技术文档大部分来至一个出处。而这篇文档中,有有些重要的细节没有描述清楚。

进入正题:

编程环境 window7 + vs2008 + soapcpp-win32-2.1.6

1.以服务器提供两数相加的功能为例,编写头文件add.h

int ns__add( int num1, int num2, int* sum );

2.找到gsoap/bin目录下的soapcpp2.exe,在cmd执行中soapcpp2.exe add.h,成功的话会生成如下文件add.namap,soapH.h,soapC.cpp,soapClient.cpp,soapServer.cpp

执行soapcpp2.exe -h可查看其具体运行参数。

3.在vs2008下新建win32控制台工程,将刚才生成的所有文件和gsoap_win32目录下stdsoap2.cpp、stdsoap2.h文件加入工程
其中,文件add.nsmap文件改为后缀为.h的文件(这里为nsmap.h),不然add.nsmap会产生如下的编译错误:

non-aggregates cannot be initialized with initializer list 1> 'Namespace' : Types with user defined constructors are not aggregate 

并引入wsock32.lib库,并新建一个main.cpp文件,编写代码如下:

#include "add.h"
#include "stdsoap2.h" 

#include "nsmap.h"   //不添加的话,会导致gsoap unresolved external symbol _namespaces的链接错误

#pragma comment(lib,"wsock32.lib")

int main(int argc, char* argv[])
{

int m, s; /* master and slave sockets */

struct soap add_soap;

soap_init(&add_soap);


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;
}


编译运行ok,启动123端口,在浏览器中输入localhost:123访问server,显示如下的xml页面


以上就是关于gSOAP 编写webServer的过程,目前只是硬生生的完成一个简单demo,其中的原理还是不太懂。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值