• java(客户端)调用 gSOAP发布的C++函数(服务器端)


    java(客户端)调用 gSOAP发布的C++函数(服务器端)

    1. 服务器端

      1. 创建将要发布的c++头文件(calc.h)

        • //gsoap ns service name: calc  
          //gsoap ns service style: rpc
          //gsoap ns service encoding:encoded
          //gsoap ns service namespace: http://localhost/calc.wsdl
          //gsoap ns service location: http://localhost/calc.cgi
          //gsoap ns schema namespace: urn:calc
          int ns__add(double num1,double num2,double* sum );

        • 注意:

          • service name:提供的服务名称

          • service style:Web Service绑定类型,对应于wsdl中的

            <binding name="calc" type="tns:calcPortType">
            <SOAP:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
            <operation name="add">
              <SOAP:operation style="rpc" soapAction=""/>
              <input>
                 <SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
              </input>
              <output>
                 <SOAP:body parts="parameters" use="literal" namespace="urn:calc"/>
              </output>
            </operation>
            </binding>

          • service encoding:编码格式,对应于wsdl中的<?xml version="1.0" encoding="UTF-8"?>

          • service namespace:命名空间,对应于wsdl中的targetNamespace和xmlns:tns的值

            targetNamespace="http://localhost/add.wsdl"
            xmlns:tns="http://localhost/add.wsdl"

          • service location:服务定位

            <service name="calc">
            <documentation>gSOAP 2.7.6c generated service definition</documentation>
            <port name="calc" binding="tns:calc">
              <SOAP:address location="http://localhost/calc.cgi"/>
            </port>
            </service>

          • schema namespace:

      2. 通过头文件生成相应的文件

        • 将gsoap_win32_2.7.6c.zip中的soapcpp2.exe拷贝至头文件(calc.h)所在的文件夹目录下,并在命令行中执行:soappcpp2.exe calc.h

          • image

          • 将生成下面的文件:

          • image 

      3. 通过vc++ 6.0编译代码

        1. 创建项目(wt_pro_proj)

          • image

        2. 将刚才生成的文件以及gsoap_win32_2.7.6c.zip中的stdsoap2.h和stdsoap2.cpp拷贝至此项目的根目录下:

          • image

        3. 将图示中的文件添加至项目中:

          • image

        4. 添加wsock32.lib至项目中:

          • image

        5. soapC.cpp、soapServer.cpp、stdsoap2.cpp不使用预编译

          • image

        6. 创建头文件(calc.h)的实现源文件calcServer.cpp

          • #include "calc.h"
            #include "calc.nsmap"

            int main(int argc, char* argv[])
            {
                int m, s; /* master and slave sockets */
                struct soap calc_soap;
                soap_init(&calc_soap);//soap_set_namespaces(&calc_soap, add_namespaces);
                if (argc < 2)
                {
                    printf("usage: %s <server_port> \n", argv[0]);
                    exit(1);
                }
                else
                {
                    m = soap_bind(&calc_soap, NULL, atoi(argv[1]), 100);
                    if (m < 0)
                    {
                        soap_print_fault(&calc_soap, stderr);
                        exit(-1);
                    }
                    fprintf(stderr, "Socket connection successful: master socket = %d\n", m);
                    for ( ; ; )
                    {
                        s = soap_accept(&calc_soap);
                        if (s < 0)
                        {
                            soap_print_fault(&calc_soap, stderr);
                            exit(-1);
                        }
                        fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);
                        soap_serve(&calc_soap);//该句说明该server的服务
                        soap_end(&calc_soap);
                    }
                }
                return 0;
            }
            //server端的实现函数与add.h中声明的函数相同,但是多了一个当前的soap连接的参数
            int ns__add(struct soap *calc_soap, double num1, double num2, double *sum)
            {
                *sum = num1 + num2;
                return 0;
            }

        7. 编译成功后,将在此项目的Debug目录下生成一个以项目名称命名的可执行文件(wt_pro_proj.exe)

        8. 通过在命令行中执行wt_pro_proj.exe  9000,发布c++的服务。注意9000为端口号,您可以指定任意没有被使用的端口号。

          image
          •  

        9. 测试,在浏览器中输入http://localhost:9000
          • image
    2. 客户端

      •  

    3. 1

    4. 1

    5.  

    评论

    若要添加评论,请使用您的 Windows Live ID 登录(如果您使用过 Hotmail、Messenger 或 Xbox LIVE,您就拥有 Windows Live ID)。登录


    还没有 Windows Live ID 吗?请注册

    引用通告

  • 相关阅读:
    Python3开发环境及基本语法(一)
    PostMan接口测试工具
    Jmeter接口测试(三)
    Jmeter接口测试(二)
    Jmeter接口测试(一)
    Fiddler抓包工具
    HTTP协议数据结构分析
    CentOS7种搭建FTP服务器
    CentOS7 apache创建虚拟路径
    CentOS7上搭建WordPress博客
  • 原文地址:https://www.cnblogs.com/cy163/p/1521408.html
Copyright © 2020-2023  润新知