Linux 平台gsoap简单使用
2017-04-08 15:21
155 查看
gsoap下载地址:https://sourceforge.net/projects/gsoap2/?source=typ_redirect
1、编译生成soapcpp2
下载解压之后 跳转gsoap-2.8 目录,执行
./configure
cd gsoap/ 执行 make
会在src目录下生成soapcpp2
2、创建test目录
新建add.h 头文件 内容如下
int ns2__add( int num1, int num2, int* sum );
cd test
然后我们执行../src/soapcpp2 -c add.h,自动生成一些远程调用需要的文件。如下所示:
接下来我们写一个服务端,创建文件addserver.c,内容如下:
#include "soapH.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, 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);
soap_end(&add_soap);
}
}
return 0;
}
int ns2__add(struct soap *add_soap, int num1, int num2, int *sum)
{
*sum = num1 + num2;
return 0;
}
我们接着写客户端,文件addclient.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "soapStub.h"
#include "add.nsmap"
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, namespaces);
soap_call_ns2__add(&add_soap, server, NULL, num1, num2, sum);
printf("server is %s, num1 is %d, num2 is %d\n", server, num1, num2);
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;
}
int main(int argc, char **argv)
{
int result = -1;
char server[128] = {0};
int num1;
int num2;
int sum;
if (argc < 4) {
printf("usage: %s <ip:port> num1 num2 \n", argv[0]);
exit(1);
}
strcpy(server,argv[1]);
num1 = atoi(argv[2]);
num2 = atoi(argv[3]);
result = add(server, num1, num2, &sum);
if (result != 0) {
printf("soap error, errcode=%d\n", result);
} else {
printf("%d + %d = %d\n", num1, num2, sum);
}
return 0;
}
Makefile 文件,注意格式,命令行要以table开始
GSOAP_ROOT = /home/mint/my_work/gsoap/gsoap-2.8/gsoap
WSNAME = add
CC = g++ -g -DWITH_NONAMESPACES
INCLUDE = -I$(GSOAP_ROOT)
SERVER_OBJS = soapC.o stdsoap2.o soapServer.o $(WSNAME)server.o
CLIENT_OBJS = soapC.o stdsoap2.o soapClient.o $(WSNAME)client.o $(WSNAME)cliento
all: server
server: $(SERVER_OBJS)
$(CC) $(INCLUDE) -o $(WSNAME)server $(SERVER_OBJS)
client: $(CLIENT_OBJS)
$(CC) $(INCLUDE) -o $(WSNAME)client $(CLIENT_OBJS)
cl:
rm -f *.o *.xml *.a *.wsdl *.nsmap soapH.h $(WSNAME)Stub.* $(WSNAME)server ns.xsd $(WSNAME)test
注意:编译的时候我们需要gsoap包里的源代码文件,把上层目录下的stdsoap2.c和stdsoap2.h文件拷贝到当前目录
然后我们执行make,即可生产addserver程序;make client,生成addclient程序。
让server跑起来,执行./addserver 6666
终端打印出“Socket connection successful: master socket = 3”,那么你的server已经在前台run起来了;
运行客户端,./addclient ip:port num1 num2,返回加法的结果。
1、编译生成soapcpp2
下载解压之后 跳转gsoap-2.8 目录,执行
./configure
cd gsoap/ 执行 make
会在src目录下生成soapcpp2
2、创建test目录
新建add.h 头文件 内容如下
int ns2__add( int num1, int num2, int* sum );
cd test
然后我们执行../src/soapcpp2 -c add.h,自动生成一些远程调用需要的文件。如下所示:
接下来我们写一个服务端,创建文件addserver.c,内容如下:
#include "soapH.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, 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);
soap_end(&add_soap);
}
}
return 0;
}
int ns2__add(struct soap *add_soap, int num1, int num2, int *sum)
{
*sum = num1 + num2;
return 0;
}
我们接着写客户端,文件addclient.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "soapStub.h"
#include "add.nsmap"
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, namespaces);
soap_call_ns2__add(&add_soap, server, NULL, num1, num2, sum);
printf("server is %s, num1 is %d, num2 is %d\n", server, num1, num2);
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;
}
int main(int argc, char **argv)
{
int result = -1;
char server[128] = {0};
int num1;
int num2;
int sum;
if (argc < 4) {
printf("usage: %s <ip:port> num1 num2 \n", argv[0]);
exit(1);
}
strcpy(server,argv[1]);
num1 = atoi(argv[2]);
num2 = atoi(argv[3]);
result = add(server, num1, num2, &sum);
if (result != 0) {
printf("soap error, errcode=%d\n", result);
} else {
printf("%d + %d = %d\n", num1, num2, sum);
}
return 0;
}
Makefile 文件,注意格式,命令行要以table开始
GSOAP_ROOT = /home/mint/my_work/gsoap/gsoap-2.8/gsoap
WSNAME = add
CC = g++ -g -DWITH_NONAMESPACES
INCLUDE = -I$(GSOAP_ROOT)
SERVER_OBJS = soapC.o stdsoap2.o soapServer.o $(WSNAME)server.o
CLIENT_OBJS = soapC.o stdsoap2.o soapClient.o $(WSNAME)client.o $(WSNAME)cliento
all: server
server: $(SERVER_OBJS)
$(CC) $(INCLUDE) -o $(WSNAME)server $(SERVER_OBJS)
client: $(CLIENT_OBJS)
$(CC) $(INCLUDE) -o $(WSNAME)client $(CLIENT_OBJS)
cl:
rm -f *.o *.xml *.a *.wsdl *.nsmap soapH.h $(WSNAME)Stub.* $(WSNAME)server ns.xsd $(WSNAME)test
注意:编译的时候我们需要gsoap包里的源代码文件,把上层目录下的stdsoap2.c和stdsoap2.h文件拷贝到当前目录
然后我们执行make,即可生产addserver程序;make client,生成addclient程序。
让server跑起来,执行./addserver 6666
终端打印出“Socket connection successful: master socket = 3”,那么你的server已经在前台run起来了;
运行客户端,./addclient ip:port num1 num2,返回加法的结果。
相关文章推荐
- LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
- Linux平台下基于C语言使用gSOAP开发Web Service服务端和客户端程序
- LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
- LJMM平台( Linux +Jexus+MySQL+mono) 上使用MySQL的简单总结
- GNU/Linux平台上正则表达式的简单使用
- Linux平台下基于C++语言使用gSOAP开发Web Service服务端和客户端程序
- Linux平台下基于C++语言使用gSOAP开发Web Service服务端和客户端程序
- XNA Game Studio是一套有着强大功能和简单界面的游戏制作平台,游戏开发商和游戏玩家都可以使用这套工具开发针对Windows XP以及Xbox360的游戏,XNA Game Studio分为两种版本,一种是面向初学者的EXPRESS版本,还有一种
- Linux一些简单的使用技巧
- 在POWER平台的Linux如何使用XL C/C++
- Linux几个简单使用的命令
- 使用cacti + rrd构建免费的Linux系统监控平台
- Maemo Linux手机平台系列分析:8 Maemo平台开发之 使用Glib绑定的D-Bus
- Linux学习随手记(1) find命令的最简单的使用方法
- Linux平台上关于工具Wine的完全使用指南(2)
- Linux平台上关于工具Wine的完全使用指南(1)
- linux下使用libcpcap的简单代码
- linux file.src.rpm 使用方法的简单介绍
- 使用Gnu gprof进行Linux平台下的程序分析
- Linux/Unix下使用rsync同步文件(简单的例子)