在windows下用gSoap实现简单加法实例
来源:互联网 发布:网络机房管理制度 kt板 编辑:程序博客网 时间:2024/06/06 00:17
这是看网上的N个教程的版本后,实现一个简单的a+b程序,在服务器端写一个程序,里面包含了a+b的函数
然后通过客户端代码向其发送两个数字,在服务器运算得到结果返回给客户端显示出来
1.在gSoap的官网上下载文件夹,本人的版本是gsoap-win32-2.7.6c
下载地址:http://sourceforge.net/projects/gsoap2
官方网站:http://genivia.com/Products/gsoap/index.html
2.新建一个文件夹server
3.将gSoap解压出来后,将\gsoap-win32-2.7的soapcpp2.exe放到server里面
用vc在server建立一个add.h的头文件
输入下面得代码
- <span style="font-size:18px">//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 );
- </span>
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.7的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);
- //soap_set_namespaces(&add_soap, add_namespaces);
- 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(一个一个的添加,免得出错),在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 \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_set_namespaces(&add_soap, add_namespaces);
- //该函数是客户端调用的主要函数,后面几个参数和add.h中声明的一样,前面多了3个参数,函数名是接口函数名ns__add前面加上
- 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(一个一个的添加,免得出错),在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地址再重新编译即可
- 在windows下用gSoap实现简单加法实例
- 在windows下用gSoap实现简单加法实例
- 在windows下用gSoap实现简单加法实例
- 在Windows 7的VS2010下用gSoap实现简单加法实例*
- VS2010下用gSoap实现简单加法实例
- Windows7下gsoap实现Webservices的简单加法实例(详细步骤+调试问题解决)
- 用gsoap实现加法的例子
- 在linux下用gsoap实现c语言的webservice实例
- gsoap简单实例
- gsoap简单实例
- gsoap简单实例
- 用Gsoap实现多线程服务的实例
- Windows下用gSOAP开发webservice程序
- linux下gsoap的加法程序
- 使用gSOAP开发实例(6) 在HP-UX下编译gSOAP-2.7.17
- 使用 gSOAP 开发实例 (6) 在 HP-UX 下编译 gSOAP-2.7.17
- 使用gSOAP开发实例(6) 在HP-UX下编译gSOAP-2.7.17
- SCTP在windows下简单实现发包
- 如何在Java中使用双重检查锁实现单例
- HDU 2234 无题I (BFS,映射)
- all-load, force-load, -ObjC用法
- HTTP请求
- MySQL的备份与还原
- 在windows下用gSoap实现简单加法实例
- 字节码文件class文件的结构
- 何时调用复制构造函数
- . 如何把cocos2d-x程序编译成Android程序
- Android Fragment应用实战,使用碎片向ActivityGroup说再见
- [2178]链表的有序集合 (链表的插排法+重复元素的删除) SDUT
- Decorator(装饰模式)
- make install时"arm-linux-ranlib command not found"
- C/C++中的string 转换 int, int 转换string是怎样的过程?