Gsoap开发之结构体数据输入(对Server而言)
来源:互联网 发布:索尼耳机软件 编辑:程序博客网 时间:2024/04/30 23:01
头文件Netinterface.h如下:
/**for ip change**/struct ns__ipAddrEx{ char *ns__ipSrc; char *ns__ipDst;};struct ns__ipAddrExResponse{};/**for ip change**/
int ns__PosSetting(struct ns__ipAddrEx* ipSetting_In, struct ns__ipAddrExResponse* ipR_Out);
接口为
int ns__PosSetting(struct ns__ipAddrEx* ipSetting_In, struct ns__ipAddrExResponse* ipR_Out); 第一个形参为输入(相对Server而言,下同),第二个形参为输出结构体。
找到soapcpp2执行文件,新建一个工程目录后进入,在terminal里执行$ ./soapcpp2 -c Netinterface.h
-c 是生成纯C的SOAP代码架构的意思,这些可以参看soapcpp2命令说明。 OK,生成架构后即可开始码代码了。
Server端:
#define myTable "/etc/ipaddr"#define IP_LEN 4#define IP_BUF 100#define IPADDR_LEN 16
intmain (int argc, char *argv[]){int m, s;struct soap mySoap;soap_init (&mySoap);mySoap.bind_flags = SO_REUSEADDR;mySoap.fget = http_get;soap_set_namespaces(&mySoap, namespaces);soap_set_recv_logfile(&mySoap, "./log/S_RECV.log");soap_set_sent_logfile(&mySoap, "./log/S_SENT.log");soap_set_test_logfile(&mySoap, "./log/S_TEST.log");if (argc < 2){ printf ("usage: %s <server_port> \n", argv[0]); exit (1);}else{ m = soap_bind (&mySoap, NULL, atoi (argv[1]), 100); if (m < 0) { soap_print_fault (&mySoap, stderr); exit (-1); } fprintf (stderr, "Socket connection successful: master socket = %d\n",m); for (;;) { s = soap_accept (&mySoap); if (s < 0) { soap_print_fault (&mySoap, stderr); exit (-1); } fprintf (stderr, "Socket connection successful: slave socket = %d\n", s); soap_serve (&mySoap); //该句说明该server的服务 soap_end (&mySoap); }}return 0;}
<pre name="code" class="cpp">intns__PosSetting(struct soap *mySoap, struct ns__ipAddrEx* ipSetting_In, struct ns__ipAddrExResponse* ipR_Out){ int result = -1; if(ipSetting_In->ns__ipSrc != NULL && ipSetting_In->ns__ipDst) { result = SOAP_OK; printf("__PosSetting: srcIp--%s, dstIp--%s\n", ipSetting_In->ns__ipSrc, ipSetting_In->ns__ipDst); } else { printf("server: PosSetting\n"); } return result;}
Client端:
<pre name="code" class="cpp">intPosSetting(const char *server, struct ns__ipAddrEx* ipSetting_In, struct ns__ipAddrExResponse* ipR_Out){struct soap mySoap; /* 创建mySoap()结构体 */int result = 0;soap_init (&mySoap); /* soap_init()*/soap_set_namespaces(&mySoap, namespaces);ipSetting_In->ns__ipSrc = soap_malloc(&mySoap, 16);memset(ipSetting_In->ns__ipSrc, '\0', 16);snprintf(ipSetting_In->ns__ipSrc, 16, "10.0.0.22");ipSetting_In->ns__ipDst = soap_malloc(&mySoap, 16);memset(ipSetting_In->ns__ipDst, '\0', 16);snprintf(ipSetting_In->ns__ipDst, 16, "10.0.0.21");#ifdef __DEBUGsoap_set_recv_logfile(&mySoap, "./log/C_RECV.log");soap_set_sent_logfile(&mySoap, "./log/C_SENT.log");soap_set_test_logfile(&mySoap, "./log/C_TEST.log");#endifsoap_call_ns__PosSetting (&mySoap, server, "", ipSetting_In, ipR_Out); /* 调用soap_call_ns__PosSetting() */if (mySoap.error) {printf ("soap error:%d,%s,%s\n", mySoap.error, *soap_faultcode (&mySoap), *soap_faultstring (&mySoap));result = mySoap.error; }else{printf("PosSetting OK\n");}soap_end (&mySoap); /* 释放内存空间 */soap_done (&mySoap);return result;}
最后,分别执行Server及Client端应用即可。
PS: 要善于利用wireshark网络抓包工具,对协议包进行分析,另外也要会用gsoap提供的debug log, 从里面可以看出很多问题。 我的一个内存出错问题还有结构体传送异常问题也都是通过它找到答案的。 0 0
- Gsoap开发之结构体数据输入(对Server而言)
- Gsoap开发之结构体数据输出(对Server而言)
- gsoap开发之旅(1)
- 基于gsoap开发WebService服务返回结构体数组
- 大数据资源争夺战此起彼伏 对用户而言是福是祸?
- 《大鱼海棠》,对我而言仅仅是三年之约
- 关于结构体运用中的一些细节问题(输入的数据与打印出来的对不齐)
- 对你而言
- 相比Delphi开发而言
- Hibernate的注解开发之数据的三种关系介绍,表结构多对多
- onvif开发系列之--------编译gsoap
- gSoap下Server端接口函数的数据传出[转]
- gSoap下Server端接口函数的数据传出[转]
- gSoap下Server端接口函数的数据传出
- gSoap下Server端接口函数的数据传出
- [笔记] GSOAP + APACHE SERVER 开发 FEMTO网管系统
- java编程之对10个整数进行排序(从命令窗输入数据)
- java编程之对10个整数进行排序(从对话窗体输入数据)
- 推荐博客
- Google将专注于Android Studio,放弃Eclipse+ADT
- [.Net码农].net 枚举(Enum)使用总结
- 黑马程序员---GUI图形化界面
- C#“猜猜看”——物联网工程1122 黄炜彬
- Gsoap开发之结构体数据输入(对Server而言)
- 获取设备型号、app信息、系统信息
- 理解WebKit和Chromium: Android 4.4 上的Chromium WebView
- 【并查集合并注意!!!!】【最小生成树】
- 国内油价迎年内最小降幅:92号汽油下跌0.07元/升
- 一次完整的网络通讯
- C++实现一个简单图书借阅流程
- xcode 6.4 插件失效的解决办法
- 整数分隔