onvif 笔记一(gsoap)
来源:互联网 发布:按键精灵数组输出 编辑:程序博客网 时间:2024/04/29 15:03
1、gsoap编译很简单
E、编写测试程序:addtest.c
G、编译执行
./configure
make
2、用gsoap生成相关文件
第一种:根据wsdl生成
生成头文件:wsdl2h -o outfile.h infile.wsdl
生成源文件:soapcpp2 -c outfile.h
第二种:根据头文件生成
3、本次主要介绍根据头文件生成的方法(我也是从网上搜到的资料,并加以改进和测试。)
例子是实现在客户端输入2个数字,然后远程调用服务端的加法函数,最后返回结果给客户端。
A、编写头文件add.h
int ns__add( int num1, int num2, int* sum );
B、执行soapcpp2 -c add.h,会生成相关的文件。
C、编写服务端程序:addserver.c
#include "soapH.h"#include "soapStub.h"#include "ns.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\r\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\r\n", s); soap_serve(&add_soap); soap_end(&add_soap); } } return 0;}int ns__add(struct soap *add_soap, int num1, int num2, int *sum){ *sum = num1 + num2; return 0;}
#include "soapStub.h"#include "ns.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_ns__add(&add_soap, server, NULL, num1, num2, sum); printf("server is %s, num1 is %d, num2 is %d\r\n", server, num1, num2); if(add_soap.error) { printf("soap error: %d, %s, %s\r\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;}
E、编写测试程序:addtest.c
#include <stdio.h>#include <stdlib.h>#include <string.h>int add(const char *server, int num1, int num2, int *sum);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\r\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 \r\n", result); } else { printf("%d + %d = %d\r\n", num1, num2, sum); } return 0;}
GSOAP_ROOT = /mnt/hgfs/work/onvif/gsoap-2.8/gsoapWSNAME = addCC = g++ -g -DWITH_NONAMESPACESINCLUDE = -I$(GSOAP_ROOT)SERVER_OBJS = soapC.o stdsoap2.o soapServer.o $(WSNAME)server.oCLIENT_OBJS = soapC.o stdsoap2.o soapClient.o $(WSNAME)client.o $(WSNAME)test.oall: server clientserver: $(SERVER_OBJS) $(CC) $(INCLUDE) -o $(WSNAME)server $(SERVER_OBJS) client: $(CLIENT_OBJS) $(CC) $(INCLUDE) -o $(WSNAME)test $(CLIENT_OBJS)clean: rm -f *.o $(WSNAME)server $(WSNAME)test其中 GSOAP_ROOT 为你下载的gsoap源码路径
G、编译执行
./addserver 9000;
./addtest 192.168.1.42:9000 111 222
执行结果为 server is 192.168.1.42:9000, num1 is 111, num2 is 222/n111 + 222 = 333
源码下载路径:http://download.csdn.net/detail/lishuanglin131/4750696
- onvif 笔记一(gsoap)
- gSOAP+onvif初探(一):生成onvif代码框架
- gsoap及onvif开发客户端框架的生成(一)
- gSOAP+onvif初探(二):onvif鉴权
- gSOAP+onvif初探(三):PTZ控球
- gsoap实现onvif
- gsoap实现ONVIF服务
- ONVIF: gsoap安装过程
- ONVIF: gsoap安装过程
- gsoap-onvif移植到树莓派
- onvif服务端gsoap问题
- ONVIF: gsoap安装过程
- onvif学习笔记4:Windows环境使用gsoap生成onvif框架代码
- onvif学习笔记3:Windows环境使用gsoap生成onvif框架代码
- onvif 上手(一)
- onvif gsoap 工具的使用
- onvif开发之一:gsoap基础
- linux下编译gsoap+onvif
- 计算机操作系统-第六章
- 云海数量推出到会网:专注会议的大数据服务平台
- 学生选修课程系统
- AOP具体实现
- 操作系统小结
- onvif 笔记一(gsoap)
- 使用Aspose.Pdf处理XML文档生成PDF文件
- 『译』三种东西永远不要放到数据库里
- delphi new dispose create free
- AOP定义和概念
- find命令详解
- ArchieOpenGL教程第六课:对OpenGL进行设置
- Android应用开发揭秘的第10个程序5_5_DrawAllShape修改版和高仿版的源码注释
- Aspose.BarCode使用非英文字符编写二维码