onvif server Discovery实现

#include "soapH.h"

#include "wsddapi.h"

#include <stdio.h>

#include <sys/types.h>          /* See NOTES */

#include <sys/socket.h>

#include <unistd.h>

#include <errno.h>

extern int GetListenPort();

void* main_probe(void* arg)

{

int m, s;

struct ip_mreq mcast;

struct soap soap;

soap_init2(&soap, SOAP_IO_UDP | SOAP_IO_FLUSH, SOAP_IO_UDP|SOAP_IO_FLUSH);

soap_set_namespaces(&soap, namespaces);

soap_set_mode(&soap, SOAP_C_UTFSTRING);//客户端接收支持中文

soap.bind_flags        = SO_REUSEADDR;

soap.connect_timeout   = 10;

soap.recv_timeout      = 5;

soap.send_timeout      = 5;

soap_register_plugin(&soap, soap_wsa);

// 打开调试信息,需 1)、首先gsoap安装时,在./configure --prefix=/usr/local/gsoap --enable-debug

// 2)、在/usr/local/gsoap/include/sdtsoap2.h文件中开启#define DEBUG

//soap_set_recv_logfile(&soap, "./log/recv.xml");

//soap_set_sent_logfile(&soap, "./log/send.xml");

//soap_set_test_logfile(&soap, "./log/test.log");

if(!soap_valid_socket(soap_bind(&soap, NULL, 3702, 16)))

{

soap_print_fault(&soap, stderr);

exit(1);

}

mcast.imr_multiaddr.s_addr = inet_addr("239.255.255.250");

mcast.imr_interface.s_addr = inet_addr("0.0.0.0");

if(setsockopt(soap.master, IPPROTO_IP, IP_ADD_MEMBERSHIP, (char*)&mcast, sizeof(mcast)) < 0)

{

printf("setsockopt error!\n");

return 0;

}

//成功绑定之后,便开始监听

for (;;) {

//监听直到有连接请求

soap_wsdd_listen(&soap, 0);

soap_destroy(&soap);

soap_end(&soap);

fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);

}

soap_done(&soap);

return (void*)0;

}

int   http_get(struct  soap   *soap)

{

/*

The callback is required to produce a response to the request in textual form, such as a

Web page or a SOAP/XML response. This method does not work with CGI.

*/

{

soap->http_content = "text/xml";  //HTTP header with text /xml content

char szContent[100] = {0};

sprintf(szContent, "welcome to use webservice!");

sprintf(soap->tmpbuf, szContent);

soap_send_raw(soap, soap->tmpbuf, strlen(szContent));

}

soap_end_send(soap);

return SOAP_OK;

}

int main(int argc, char **argv)

{

int m, s;

struct soap thesoap;

pthread_t thrProbe;

pthread_create(&thrProbe,NULL,main_probe,NULL);

soap_init(&thesoap);

soap_set_namespaces(&thesoap, namespaces);

#ifdef DEBUG

printf("debug mode\n");

#else

printf("release mode\n");

#endif

thesoap.fget = http_get;

if (argc < 0) {

printf("usage: %s <server_port> \n", argv[0]);

exit(1);

} else {

// LOAD_CFGFILE(root);

int port = GetListenPort();//8085;//root["port"].asInt();

m = soap_bind(&thesoap, NULL, port, 100);

if (m < 0) {

soap_print_fault(&thesoap, stderr);

exit(-1);

}

fprintf(stderr, "Socket connection successful: master socket = %d\n", m);

for (;;) {

s = soap_accept(&thesoap);

if (s < 0) {

soap_print_fault(&thesoap, stderr);

exit(-1);

}

//  fprintf(stderr, "Socket connection successful: slave socket = %d\n", s);

soap_serve(&thesoap);

soap_end(&thesoap);

// fprintf(stderr, " soap_end socket = %d\n", s);

}

}

return 0;

}

时间: 2024-10-08 20:52:15

onvif server Discovery实现的相关文章

onvif client Discovery实现

省略:onvif client soapRemoteDiscoveryBindingProxy 由 gsoap C++ 方式生成 #include "soapRemoteDiscoveryBindingProxy.h" #include "RemoteDiscoveryBinding.nsmap" #include<string> using namespace  std; SOAP_FMAC5 int SOAP_FMAC6 soap_send___ws

onvif 开发文档【2】

二: onvif 开发环境的搭建 下边这张图来自于网上,对我们熟悉onvif开发描述的十分清晰,我就是顺着这个思路走下去的. 从上边的介绍中,我们基本知道onvif是个什么协议,其中十分关键一点是这种协议的展现形式是webservice.让我们通过下图对webservice的调用过程有一个初步的了解. 对基于webservice格式存在接口,我们第一步要首先寻找webserive对应的wsdl文件在那里?当然去onvif的官方网站去找了.要搭建开发平台的第一步就是从onvif的官方网站获取wsd

使用Operations Manager监视Windows Server和SQL Server

在这个实验章节中通过监控Windows Server.SQL Server.来了解使用Operations Manager监控企业基础架构.这里需要下载 1. System Center Management Pack for Windows Server Operating System管理包 2. System Center Management Pack for SQL Server管理包 http://down.51cto.com/data/1895686 一. 监视Windows Se

【8】、Low Level Discovery发现实现实时监控

环境:Centos 6.6 Zabbix自动发现WEB站点: [[email protected] ~]# tail -3 /etc/zabbix/zabbix_agentd.conf UserParameter=web.site_discovery,/etc/zabbix/scripts/discovery_web_site.sh web_site_discovery UserParameter=web.site_code[*],/etc/zabbix/scripts/discovery_we

centos7 搭建ntp服务器

一.安装ntp服务 首先检查服务器上是否已安装ntp服务: [[email protected] /]rpm -qa | grep ntp ntp-4.2.6p5-22.el7.centos.2.x86_64 ntpdate-4.2.6p5-22.el7.centos.2.x86_64 如果有上述内容输出,测说明ntp服务已安装:否则需要安装ntp服务 [[email protected] /]yum install -y ntpd 安装有yum.rpm.源码安装等多种方式,本次安装使用yum安

Visual Studio Xamarin提示Bonjour backend初始化失败

Visual Studio Xamarin提示Bonjour backend初始化失败 错误信息:The Bonjour backend failed to initialize, automatic Mac Build server discovery will not be available.这是由于Windows下的Bonjour服务没有开启,需要到服务管理中,开启该服务,即可.

Visual Studio提示Bonjour backend初始化失败

Visual Studio提示Bonjour backend初始化失败 错误信息:The Bonjour backend failed to initialize, automatic Mac Build server discovery will not be available.这是由于Windows下的Bonjour服务没有开启,需要到服务管理中,开启该服务,即可.

计算机网络——链路层

数据链路层:概述与服务 链路层主要使用的信道包括: 广播信道 : 这种信道采用一对多的广播通信方式,因此过程比较复杂.广播信道上主机众多,我们必须使用专用的共享信道协议来协调这些主机的数据发送 点对点信道 : 这种信道使用一对一的点对点通信方式 链路层提供的服务 链路层协议定义了在链路两端的节点之间交互的分组格式,以及当发送和接受分组时这些节点采取的动作. 链路层协议可能提供的服务包括: 服务 概述 成帧 在每个数据报传输时,用链路层帧将其封装起来.一个帧由首部,数据字段和尾部组成.链路层的数据

微服务实践分享(8) 控制调用中心

1.熔断 在微服务领域,熔断机制是从消费端保护微服务提供者的措施,当微服务的运行质量低于某个临界值时,启动熔断机制,暂停微服务调用一段时间,以保障后端的微服务不会因为持续过负荷而宕机. 2.降级 服务降级主要包括容错降级和屏蔽降级 屏蔽降级:1)throw null 不发起远程调用,直接返回空 2)throw exception 不发起远程调用,直接抛出指定异常 3)execute bean 不发起远程调用,直接执行本地模拟接口实现 服务降级是可逆操作,当系统压力恢复到一定值不需要降级服务时,要