zoukankan      html  css  js  c++  java
  • 在Windows下用gSoap实现简单加法实例

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

    1、在gSoap的官网上下载文件夹,本人的版本是gsoap-win32-2.8

    下载地址:http://sourceforge.net/projects/gsoap2

    官方网站:http://genivia.com/Products/gsoap/index.html

    2、新建一个文件夹server

    3、将gSoap解压出来后,将gsoap-win32-2.8的soapcpp2.exe放到server里面

    用vc在server建立一个add.h的头文件

    输入下面得代码

    //gsoap ns service name: add

    //gsoap ns service namespace: http://localhost/add.wsdl

    //gsoap ns service location: http://localhost

    //gsoap ns service executable: add.cgi

    //gsoap ns service encoding: encoded

    //gsoap ns schema namespace: urn:add

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

    4、运行cmd跳到server文件夹,输入命令soapcpp2.exe add.h

    这个时候文件夹会有以下这些文件了

    add.add.req.xml

    add.add.res.xml

    add.h

    add.nsmap

    add.wsdl

    ns.xsd

    soapaddObject.h

    soapaddProxy.h

    soapC.cpp

    soapClient.cpp

    coapClientLib.cpp

    soapcpp2.exe

    soapH.h

    soapServer.cpp

    soapServerLib.cpp

    soapStub.h

    在命令行里会有一个警告,Cannot use document style with SOAP encoding<detected at line 8 in add.h>,这个可以不用管他,不知道有什么用,不过最后会显示Compilation successful。

    5、将gsoap-win32-2.8的stdsoap2.cpp与stdsoap2.h两个文件放到server里面,这个时候gSoap已经产生了C/C++源代码了,接下来最终要的就是要创建一个工程来编译他们了

    6、建立一个控制台工程,名字为server(我前面的server文件夹得路径为F:/server,那么这个时候创建的工程路径为F:/,名字为server),在工程下面新建一个addserver.cpp的源文件

    源文件中的代码如下

    #include <stdio.h>

    #include <stdlib.h>

    #include "stdsoap2.h"

    #include "add.h"

    #include "add.nsmap"

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

    {

             int m, s;

             struct soap add_soap;

             soap_init(&add_soap);

             if (argc < 2)

             {

                       printf("usage: %s <server_port> ", 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 ", 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 ", 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;

    }

    7.添加其他文件有7个add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapServer.cpp、stdsoap2.cpp(一个一个的添加,免得出错),在project-setting中将添加进来的3个源文件的C/C++选项的Category设置为Precompiled Headers

    8.在project-setting-Link在Object/library modules后添加一个wsock32.lib

    9.编译,如果这个时候有编译错误,估计是文件添加和add.h生成代码这两步又错误,可以将其推到,多试几次如果编译成功后,在Debug文件夹里面会有一个server.exe的文件,

    打开cmd,转到Debug文件下,输入server.exe 4567,接着在IE中输入http://localhost:4567,如果显示xml页面,说明程序已经启动。

    10.客户端代码编写,步骤与server类似,新建一个client文件夹,重复3-5步,接着建立一个控制台工程,名字为client(我前面的client文件夹的路径为

    F:/client那么这个时候创建的工程路径为F:/,名字为client),在工程下面新建一个addclient.cpp的源文件

    源文件中的代码如下:

    #include <stdio.h>

    #include <stdlib.h>

    #include "stdsoap2.h"

    #include "soapH.h"

    #include "add.nsmap"

    int add(const char* server, int num1, int num2, int *sum);

    int main(int argc, char **argv)

    {

             int result = -1;

             char* server="http://localhost:4567";

             int num1 = 0;

             int num2 = 0;

             int sum = 0;

             if( argc < 3 )

             {

                       printf("usage: %s num1 num2 ", argv[0]);

                       exit(0);

             }

             num1 = atoi(argv[1]);

             num2 = atoi(argv[2]);

             result = add(server, num1, num2, &sum);

             if (result != 0)

             {

                       printf("soap err,errcode = %d ", result);

             }

             else

             {

                       printf("%d+%d=%d ", num1, num2, sum );

             }

             return 0;

    }

    int add(const char* server, int num1, int num2, int *sum)

    {

             struct soap add_soap;

             int result = 0;

             soap_init(&add_soap);

             soap_call_soap_call_ns__add( &add_soap, server, "", num1, num2, sum );

             if(add_soap.error)

             {

                       printf("soap error:%d,%s,%s ",add_soap.error, *soap_faultcode(&add_soap), *soap_faultstring(&add_soap) );

                       result = add_soap.error;

             }

             soap_end(&add_soap);

             soap_done(&add_soap);

             return result;

    }

    11、添加其他文件有7个add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapClinet.cpp、stdsoap2.cpp(一个一个的添加,免得出错),在project-setting中将添加进来的3个源文件的C/C++选项的Category设置为Precompiled Headers(和server不同的是一个添加soapServer.cpp文件而另一个是添加soapClient.cpp文件)

    12、在project-setting-Link在Object/library modules后添加一个wsock32.lib,之后编译,编译成功后在Debug文件夹下会有一个client.exe文件

    13、运行一个cmd跳到server/Debug下输入 server.exe 4567

    14、运行另一个cmd跳到client/Debug下输入 client.exe 1 2

    这个时候就会出现了1+2=3

    15、如果server.exe与client.exe两个文件在两台不同的电脑上,那么将client.exe的代码char* server="http://localhost:4567";那行将localhost改为服务器的ip地址再重新编译即可

  • 相关阅读:
    IDEA 2017 安装和破解
    Linux新增开放端口
    ping指定IP的指定端口号
    Ubuntu防火墙常用命令
    Ubuntu端口常用命令
    File Zilla连接Ubuntu 失败
    Docker常用命令详解
    Linux的vi常用命令详解
    Qt事件系统之二:鼠标事件和滚轮事件
    Qt事件系统之一:Qt中的事件处理与传递
  • 原文地址:https://www.cnblogs.com/zhangnianyong/p/3804038.html
Copyright © 2011-2022 走看看