gsoap实现ONVIF服务
来源:互联网 发布:vue.js transitionend 编辑:程序博客网 时间:2024/05/03 21:00
编译gsoap过程:将所有的cpp文件放到一个工程里面,把所有的虚函数到实现以后还是编译不过。
原因:没有openssl,所以确实相关的定义
2、namespase找不到,原来得加上相应的头文件,至于是什么文件,我忘了
实现过程:
1、调用run函数后,就可以接收客户端的命令了,但是probe命令总也收不到,好像和没有加入组播组有关系,但是我加了还是没有收到。只能收到单播传来的probe信息,但是又出现问题了,不能接下客户端给我发送过来的命令,总是说tag匹配不上,查了半天也找不到原因,好了就只能暂放了
2、后来probe命令就搁浅了。继续实现了GetDeviceInfo,这个还是很顺利的。
3、开始打程序的框架,就仿照的run函数,起了住进程,来接受客户端命令,刚开始的时候,还打算起好多个run,因为每个类都有自己的run函数,因为run函数都是阻塞进行的,我还特意起了好多的线程来起run函数,到后来又发现了问题,客户端得到url后只会向一个端口发送内容,这样就会导致命令不能被合适的类的run函数接收到,最后实验失败,只能自己仿照着run函数来写自己的主函数。
但是还是出现了问题:这个是不能简单的模仿的,因为我是创建了一个soap基本对象struct soap,然后收到命令后,比较他们的tag,看看应该由那哪个类来处理,就将这个基本对象复制给它,接下来的事情就交给新建的对象了,但是有个soap_peek函数,这个函数在基本对象里面调用过了,所以到了派生对象里面,就不再调用了,这就导致了,还是不能成功的match tag,也就不能成功的接下命令并做相应的操作。后来I就改成自己用strstr判断该由哪个类来处理命令
3、后来实现GetCapabilities,这个时候问题就来了。刚开始的时候,以为像是完成GetDeviceInfo一样那么简单呢,还想着以后进度就快了呢,没想到又有新问题了。给response对象赋值的时候,总是会崩溃,后来就看来看网上是怎么实现的,原来这个时候就用到了soap_malloc,因为response对象里面都是指针,所以需要申请空间,当按照网上的写了以后,还是有问题
虽然可以运行了,但是每次客户端发来命令的时候,总是会崩溃,而且还蹦在了一个又40万行代码的文件里面,都没办法打断点,也不能找到定义的地方,所以很难搞清楚是怎么一步步调过去的,也不知道为什么崩溃的,本来想把这个文件分解了,但后来发现,里面有很多的if endif,导致非常的不好分割,用source insight来看,也不好找,看来对工具的使用,还有待提高。
后来不用网上的办法了,改成用其他公司的代码(以前都不愿意用,因为都不知道从哪看,都没有个工程,还分成了好几个文件夹,也看不出来主程序在哪,后来发现了有个文档里面像是介绍该代码的,我在写文档的时候,都是用word或txt,这人用的pdf,我还以为是onvif官网上发的呢),直接拷贝过去,简单的修改了一下,就可以编译过了,但是还是有问题,同样是一编译就崩溃,调了好半天,后来发现,我直接return ok的时候就不崩溃了,说明是我填充的那段代码里面有问题,再后来叫了个高手帮我看了看,他说应该是内存分配上出了问题,我就把soap_malloc换成了soap_new_class,因为我看的代码都是c写的,都是用的struct,而我是用类的,但后来发现还是不行,后来我又改成了用new来分配内存,发现还是不行
最后发现,原来是申请空间出问题了,不知道为什么,别人的代码里面,都没有对最上层的对象申请空间,而是从第二层开始的,加上上层内存分配后,就不崩溃了,但是问题又来了
客户端收不到我发出的东西,总是没有能力信息。后来发现,我在发送的时候,填充的数据都已经没有了,也不知道为什么,申请的空间竟然被回收了,可是网上明明写着,会在调用soap_free等操作的时候,才会释放空间的啊,百思不得其解啊。
现在我还没有找到为什么空间被释放的问题,但是别人的空间就没有被释放掉啊,为什么我的就被释放了呢,肯定是我的某个地方出了问题。
- gsoap实现ONVIF服务
- gsoap实现onvif
- onvif协议实现1:gsoap安装
- 基于Gsoap 集成多个ONVIF服务(ws-discovery)
- Gsoap 集成多个ONVIF服务(DeviceMgmt service)
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- linux设备上的Onvif 实现3:gsoap框架基础知识
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- Onvif用户验证之gSOAP插件wsseapi调用实现
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例
- onvif规范的实现:使用gSOAP创建SOAP调用实例 .
- device token详解
- java调用wcf控件的两种交互
- watchdog 分析
- 我的Android学习--时间选择器 TimePicker
- [1]ORACLE ERP之路:EBS安装及中文补丁
- gsoap实现ONVIF服务
- Oracle抑制日志(NOLOGGING)
- Linux 下定时器的实现方式分析
- 中炮过河车七路马对屏风马--左马盘河
- linux 下安装subversion 客户端和服务器(实例)
- data dump for sequence
- C语言进程间通信(四)——共享内存
- Lambda 表达式
- 写在诺基亚被收购之后