onvif soap接口代码框架的关联

来源:互联网 发布:萧航网络 编辑:程序博客网 时间:2024/06/08 06:15

开始学习onvif.

以下内容参考:  http://blog.csdn.net/ghostyu/article/details/8182516 来修改添加的。

  服务端与客户端的数据交互采用SOAP协议,音视频流则通过RTP/RTSP进行 。

  在生成所需文件后,开始编写程序:

   程序包括:  服务器(设备(ipc))、客户端(nvr)。

一个最简单的soap调用的例子:

服务端代码:

  1. #include "soapH.h"  
  2. #include "add.nsmap"
  1. int main(int argc, char **argv)  
  2. {  
  3.     int m, s;  
  4.     struct soap add_soap;  
  5.     soap_init(&add_soap);  
  6.     soap_set_namespaces(&add_soap, namespaces);  
  7.     soap_bind(&add_soap, NULL, atoi(argv[1]), 100);  //失败调用soap_print_fault(&add_soap, stderr) 并退出;  
  8.     for (;;) 
  9.      { 
  10.             s = soap_accept(&add_soap); //失败调用soap_print_fault(&add_soap, stderr) 并退出; 
  11.             fprintf(stderr, "Socket connection successful: slave socket = %d\n", s); 
  12.             soap_serve(&add_soap);  
  13.             soap_end(&add_soap);  
  14.      }
  15. }

  16. int ns2__add(struct soap *add_soap, int num1, int num2, int *sum) 
  17. {    
  18.       *sum = num1 + num2;   
  19.    return 0;

客户端代码:   
  1. #include <stdio.h>  
  2. #include <stdlib.h>  
  3. #include <string.h> 
        #include "soapStub.h"  
  1. #include "add.nsmap" 
  1. int main(int argc, char **argv)  
  2.     char server[128] = {0};    
  3.     int num1;    
  4.     int num2;    
  5.     int sum;

  6.    strcpy(server,argv[1]);   
  7.    num1 = atoi(argv[2]);  
  8.    num2 = atoi(argv[3]); 
  9.    soap_init(&add_soap);   
  10.    soap_set_namespaces(&add_soap, namespaces);   
  11.    //这里是soap的soap_call_ns2__add接口关联到服务器上的那个ns2__add接口。
  12.    soap_call_ns2__add(&add_soap, server, NULL, num1, num2, sum);  
  13.    soap_end(&add_soap);    
  14.    soap_done(&add_soap);  
  15.    printf("%d + %d = %d\n", num1, num2, sum); 
  16. }
  17. struct soap类型的参数,这是soap全局运行环境,所有的函数都第一个包含这个参数
           运行服务器:
                   
          运行客户端:
                    
        发现:  10 + 20 = 30
                     soap_call_ns2__add 实现了加法(实际是调用了ns2__add)
    分析:
         ns2__add真正的声明在自动产生的soapStub.h中,然后在自动产生的soapServer.c中被soap_serve_ns2__add()函数调用,
                    这样,就将真正的加法运算的ns2__add函数和soap代码框架联系了起来。
     注:
       编译server和client的时候复制了两个文件stdsoap2.h和stdsoap2.c,这里面的soap_init() soap_end()等函数来自他们
         实现简图:
                                   





原创粉丝点击