现在的位置: 首页 > 综合 > 正文

gsoap 简单使用

2014年01月25日 ⁄ 综合 ⁄ 共 1764字 ⁄ 字号 评论关闭

from:http://blog.csdn.net/jinpw/article/details/3346844

  • 对gsoap的简单介绍,请自己参阅http://gsoap2.sourceforge.net/

    下载相应的包,主要有2个工具和源代码:
    wsdl2h -o outfile.h infile.wsdl
实现wsdl文件到h文件的数据映射
        
soapcpp2 -c outfile.h生成相应的底层通信stub,strech程序

  • 下面这个简单的例子实现的是在客户端输入2个数字,然后远程调用服务端的加法函数,最后返回结果给客户端。

    在这里我们不需要wsdl的文件,可以直接从.h文件来生成代码。我们定义一个函数声明文件,用来定义接口函数,名称为add.h,内容如下:

  1. //gsoapopt cw
  2. //gsoap ns2 schema namespace: urn:add
  3. //gsoap ns2 schema form: unqualified
  4. //gsoap ns2 service name: add
  5. //gsoap ns2 service type: addPortType
  6. //gsoap ns2 service port:http://websrv.cs.fsu.edu/~engelen/addserver.cgi
  7. //gsoap ns2 service namespace: urn:add
  8. //gsoap ns2 service transport: http://schemas.xmlsoap.org/soap/http
  9. //gsoap ns2  service method-style:      add rpc
  10. //gsoap ns2  service method-encoding:   
  11. add http://schemas.xmlsoap.org/soap/encoding/
  12. //gsoap ns2  service method-action:     add ""
  13. int ns2__add( int num1, int num2, int* sum );

然后我们执行soapcpp2 -c add.h,自动生成一些远程调用需要的文件。

接下来我们写一个服务端,创建文件addserver.c

  1. #include "soapH.h"
  2. #include "add.nsmap"
  3. int main(int argc, char **argv)
  4. {
  5.     int m, s;
  6.     struct soap add_soap;
  7.     soap_init(&add_soap);
  8.     soap_set_namespaces(&add_soap, namespaces);
  9.     if (argc < 2) {
  10.         printf("usage: %s <server_port> /n", argv[0]);
  11.         exit(1);
  12.     } else {
  13.         m = soap_bind(&add_soap, NULL, atoi(argv[1]), 100);
  14.         if (m < 0) {
  15.             soap_print_fault(&add_soap, stderr);
  16.             exit(-1);
  17.         }
  18.         fprintf(stderr, "Socket connection successful: master socket = %d/n", m);
  19.         for (;;) {
  20.             s = soap_accept(&add_soap);
  21.             if (s < 0) {
  22.                 soap_print_fault(&add_soap, stderr);
  23.                 exit(-1);
  24.             }
  25.             fprintf(stderr, "Socket connection successful: slave socket = %d/n", s);
  26.             soap_serve(&add_soap);

抱歉!评论已关闭.