linux xmlrpc 服务端 java客户端
2015-07-16 23:41
483 查看
最近在搞利用xmlrpc协议与java端通信,其好处就是可以跨平台通信java、c、PHP、c++都支持。首先需要去sourceforge网站去下载xmlrpc库安装在系统上,我用c实现了一个服务端,c服务端最主要的是这个函数xmlrpc_decompose_value,稍后讲解,以下是c服务端代码,java客户端没有贴:
static xmlrpc_value * setRule(xmlrpc_env * const envP, xmlrpc_value * const paramArrayP, void * const usr_data)//方法对应的函数 { xmlrpc_value *arrayP; xmlrpc_value *retval; char * getXmlString; xmlrpc_decompose_value(envP, paramArrayP, "(s)", &getXmlString);//解析客户端传来的内容,其中第三个参数是格式,第四个参数是变量,格式可以为多个,参数也可以为多个。这里为"(s)",是以字符串解析,getXmlString(char *型)指向解析到的结果。如果为“(i)”,那么就是以int型解析,解析的结果(第四个参数)应该为int型变量。也可以是这种形式"(ii)"、"(is)",这说明解析的参数为两个,分别为int型和int型、int型和字符串型,后面的接受参数也应该为两个。"(A)"是以字符数组解析,“(S)”大写S是以结构体解析等等,具体解析格式可以参考xmlrpc函数手册,google之。 if(envP->fault_occurred) return NULL; else{ printf("getXmlString :%s\n",getXmlRule); pthread_mutex_lock(&xml_parse_mutex); parse_xml_string(getXmlString, strlen(getXmlString));//此函数忽略 pthread_mutex_unlock(&xml_parse_mutex); } free((void *)getXmlRule);
static void * XmlRpcListenThreadFunc(void *args) { xmlrpc_server_abyss(&env, &serverparm, XMLRPC_APSIZE(log_file_name));//c服务端 return NULL; } static void XmlRpcStartListenThread() { pthread_t xmlrpc_listen_thread; pthread_create(&xmlrpc_listen_thread, NULL, (void*)XmlRpcListenThreadFunc, NULL);//创建线程 pthread_detach(xmlrpc_listen_thread); }
<pre name="code" class="plain">int main(){ //struct xmlrpc_method_info3 const methodInfo = { // "nprobe.setRule", // &nprobe_setRule, //}; xmlrpc_registry * registryP; xmlrpc_env_init(&env); xmlrpc_server_abyss_global_init(&env); registryP = xmlrpc_registry_new(&env); xmlrpc_registry_add_method(&env, registryP, NULL, "setRule",&setRule, NULL);//这里的"setRule"是客户端、服务端通信的方法名,类似于一种约定,setRule是方法对应的执行函数,一旦受到客户端的setRule方法,就会执行此函数。 serverparm.config_file_name = NULL; serverparm.registryP = registryP; serverparm.port_number = 9200;//端口 serverparm.log_file_name = NULL; XmlRpcStartListenThread();//监听线程 <pre name="code" class="plain"> while(1){ sleep(2); } return 0; }
相关文章推荐
- centos6.5 gcc 库升级
- Linux常用英文缩写的含义以及各个目录的作用
- linux c statfs系统调用
- LINUX下的PPPOE拨号
- Linux文件隐藏属性
- linux程序设计——信号量(第十四章)
- centos6.0 配置无密码sudo权限
- Linux文件存储结构
- 每天一个Linux命令-4(cat)
- Linux下的定时器:alarm()与setitimer()
- Linux文件系统介绍
- linux i2c 驱动
- Linux 设备驱动之 DTS 描述的资源
- Linux学习笔记,Linux文件系统,文件管理,目录管理
- ARM Linux 3.x 的设备树(Device Tree)之DTB、DTS
- 红帽linux夏令营第三天内容(linux新手必备)
- 每天一个linux命令(3):pwd命令
- linux 安装teamviewer
- 使用远程连接工具连接linux
- Linux 设备驱动之 UIO 用户态驱动优缺点分析