在Windows 7的VS2010下用gSoap实现简单加法实例*

本文介绍了如何在Windows 7环境下,使用Visual Studio 2010和gSoap库创建一个简单的加法服务。通过创建服务器和客户端程序,实现了远程调用加法函数,将结果从服务器返回到客户端展示。详细步骤包括gSoap的下载、编译、文件配置以及客户端和服务端代码的编写和运行。
摘要由CSDN通过智能技术生成

在Windows 7的VS2010下用gSoap实现简单加法实例

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

1、在gSoap的官网上下载文件夹,本人的版本是2.8.33

下载地址: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

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

7.将生成的7个add.h、soapH.h、soapStub.h、stdsoap2.h、soapC.cpp、soapServer.cpp、stdsoap2.cpp复制到新建的工程目录下

8.在vs工程中,添加现有项到头文件和 源文件中

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 \n", 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\n", result);

         }

         else

         {

                   printf("%d+%d=%d\n", 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\n",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到client目录中

12、添加复制进来的文件到client工程中的头文件目录和源文件目录中,之后编译,编译成功后在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地址再重新编译即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值