您的位置:首页 > 运维架构 > Linux

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;
}



                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: