#包括“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