onvif服务器发现实现


#包括“soapH。h”,

#包括“wsddapi。h”

# include & lt; stdio.h>

# include & lt; sys/types.h>,,,,,/*看到笔记*/

# include & lt; sys/socket.h>

# include & lt; unistd.h>

# include & lt; errno.h>


extern int GetListenPort ();

void * main_probe (void * arg)

{

,,int m、s;

,,struct ip_mreq mcast;

,,结构体皂皂;

,,soap_init2(和肥皂,SOAP_IO_UDP | SOAP_IO_FLUSH, SOAP_IO_UDP | SOAP_IO_FLUSH);,

,,soap_set_namespaces(及肥皂、名称空间);

,,soap_set_mode(和肥皂,SOAP_C_UTFSTRING);//客户端接收支持中文,

,,肥皂。bind_flags,,,,=SO_REUSEADDR;

,,肥皂。connect_timeout,=10;

,,肥皂。recv_timeout,,,=5;

,,肥皂。send_timeout,,,=5;

,,soap_register_plugin(和肥皂,soap_wsa);

,//打开调试信息,需1),首先gsoap安装时,在。/configure——prefix=/usr/地方/gsoap——启用调试

,//2),在/usr/地方/gsoap/include/sdtsoap2。h文件中开启#定义调试

,,//soap_set_recv_logfile(及肥皂、“。/日志/recv.xml”);

,,//soap_set_sent_logfile(及肥皂、“。/日志/send.xml”);

,,//soap_set_test_logfile(及肥皂、“。/日志/test.log”);

,,如果(! soap_valid_socket (soap_bind(和肥皂,NULL, 3702年,16)))

,,{

soap_print_fault(和肥皂,stderr);

退出(1),

,,}

,,mcast.imr_multiaddr。s_addr=inet_addr (“239.255.255.250”);

,,mcast.imr_interface。s_addr=inet_addr (“0.0.0.0”);

,,如果(setsockopt (soap。主人,IPPROTO_IP IP_ADD_MEMBERSHIP (char *), mcast, sizeof (mcast)) & lt;0),

,,{

,,,,printf (" setsockopt错误! \ n ");

,,,,返回0;

,,},

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

,,(,){

,,,,//监听直到有连接请求

,,,,soap_wsdd_listen(和肥皂,0),

,,,,soap_destroy(和soap);

,,,,soap_end(和soap);

,,,,流(stderr, "套接字连接成功:奴隶插座=% d \ n ", s);

,,}

,,soap_done(和soap);

,,(void *)返回0;

}


int,http_get (struct,肥皂,* soap),

{,

/*

回调需要产生一个响应请求的文本形式,如

Web页面或一个soap/XML响应。这种方法不使用CGI。

*/


{

soap→http_content=皌ext/xml”;,//HTTP头和text/xml内容

char szContent [100]={0};


sprintf (szContent,“欢迎使用webservice !”);


sprintf (soap→tmpbuf, szContent);


soap_send_raw (soap, soap→tmpbuf, strlen (szContent));

}


soap_end_send (soap);


返回SOAP_OK;,


}

int主要(int命令行参数个数,char * * argv),,

{,,

int m,年代;,,

,,struct soap thesoap;,,

,,

,,pthread_t thrProbe;,

,

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

,,

,,soap_init(及thesoap);,,

,,soap_set_namespaces(和thesoap,名称空间);

# ifdef调试

printf("调试模式\ n ");

# else 

printf(“释放模式\ n”); # endif

thesoap。fget=http_get;


,,

,,

,,如果(命令行参数个数& lt;0){,,

,,,,printf("用法:% s & lt; server_port>\ n”, argv [0]);,,

,,,,退出(1);,,

,,其他}{,

,//LOAD_CFGFILE(根);

,,int port=GetListenPort();//8085//根(“港口”).asInt ();

,,m=soap_bind(及thesoap NULL,港口,100);,,

,,,,如果(m & lt;0){,,

,,,,,,soap_print_fault(及thesoap stderr);,,

,,,,,,退出(1);,,

,,,,},,

,,,,流(stderr, "套接字连接成功:主套接字=% d \ n ", m);,,

,,,,(,){,,

,,,,,,s=soap_accept(及thesoap);,,

,,,null

onvif服务器发现实现