久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2875|回復: 0
打印 上一主題 下一主題
收起左側

xmlrpc-c庫的一個測試程序,client端輸入N個字符串到server段排序后返回

[復制鏈接]
跳轉到指定樓層
樓主
ID:77367 發表于 2015-4-18 20:51 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

  1. /*******************************************************************************************************
  2. *Application:xmlrpc_client.c
  3. *description:A simple string sort XML-RPC client program written in C.
  4. *author:hemmingway
  5. *time:26/05/2012 09:18:09
  6. *compile with: gcc -Wall -c -I/usr/local/include -O2 -o xmlrpc_client.o xmlrpc_client.c
  7.     gcc -lxmlrpc_client -lxmlrpc -lxmlrpc_util -lcurl -o xmlrpc_client  xmlrpc_client.o
  8. *************************************************************************************************************/

  9. #include <stdio.h>
  10. #include <stdlib.h>
  11. #include <string.h>
  12. #include <unistd.h>
  13. #include <xmlrpc-c/base.h>
  14. #include <xmlrpc-c/client.h>
  15. #include <xmlrpc-c/util.h>
  16. /*xmlrpc_env is defined in  xmlrpc-c/util.h*/
  17. #define NAME  "XMLRPC string sort C Client"
  18. #define VERSION "0.1"
  19. #define SLEEP(seconds) sleep(seconds);
  20. #define MAXLEN  1000   /*max length of any input line*/
  21. #define MAXLINES 500  /*max #lines to be sorted*/
  22. char *lineptr[MAXLINES];

  23. void die_if_fault_occurred (xmlrpc_env *env)
  24. {
  25.     /* Check our error-handling environment for an XML-RPC fault. */
  26.     if (env->fault_occurred) {
  27.         fprintf(stderr, "XML-RPC Fault: %s (%d)\n",
  28.                 env->fault_string, env->fault_code);
  29.         exit(1);
  30.     }
  31. }

  32. /*getline:read a line into s, return length*/
  33. int getline(char s[], int lim)
  34. {
  35. int c = 0 , i;
  36. /*
  37. for(i=0; i < lim-1 && (c=getchar()!=EOF) && c!='\n';++i)
  38.   s[i]=c;
  39. */
  40. i = 0;
  41. while(--lim > 0 && (c=getchar()) != EOF && c != '\n')
  42.   s[i++] = c;
  43. if(c == '\n')
  44.   s[i++] = c;
  45. s[i] = '\0';
  46. return i;
  47. }
  48. /*readlines: read input lines*/
  49. int readlines(char *linrptr[], int maxlines)
  50. {
  51. int len,nlines;
  52. char *p,line[MAXLEN];

  53. nlines = 0;
  54. while( (len = getline(line,MAXLEN) ) > 1)
  55.   if(nlines >= maxlines || (p = malloc(len*sizeof(char)) )== NULL)
  56.    return -1;
  57.   else
  58.   {
  59.    line[len-1] = '\0'; /*delete new line*/
  60.    strcpy(p,line);
  61.    lineptr[nlines++] = p;
  62.   }
  63. return nlines;
  64. }
  65. void writelines(char *lineptr[], int nlines)
  66. {
  67. int i;
  68. for(i= 0; i < nlines; i++)
  69.   printf("%s\n",lineptr[i]);
  70. }

  71. int main(int argc,  char **argv)
  72. {
  73. xmlrpc_env env;
  74. xmlrpc_value *myArrayP;
  75. xmlrpc_value *resultArrayP;
  76. xmlrpc_value *itemP;
  77. const char * const serverUrl = "http://localhost:8080/RPC2";
  78. const char * const methodName = "string.qsort";
  79. char *line;
  80. int nlines, i;
  81. /* Initialize our error-handling environment. */
  82. xmlrpc_env_init(&env);
  83. /* Start up our XML-RPC client library. */
  84. xmlrpc_client_init2(&env, XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION, NULL, 0);
  85. die_if_fault_occurred(&env);

  86. printf("Making XMLRPC call to server url '%s' method '%s' "
  87.            "to sort \'char *lineptr[]\' into increasing order...\n", serverUrl, methodName);
  88. printf("\n\n");
  89. printf(">>>plz input a line to be sort(press <ENTER><ENTER> to done!):\n");

  90. /*
  91. while(getline(line,MAXLEN) <= 0 )
  92.   ;
  93. printf(">>>input line is:\n%s\n\n",line);

  94. */

  95. if ( (nlines = readlines(lineptr,MAXLINES) ) < 0 ){
  96.   printf("error:...");
  97.   return 1;
  98. }

  99. printf(">>>lines:%d\n",nlines);
  100. printf(">>>input line's is:\n");
  101. writelines(lineptr, nlines);
  102. printf("\n\n");
  103. printf(">>>\n");

  104. myArrayP = xmlrpc_array_new(&env);
  105. die_if_fault_occurred(&env);
  106. /*build array*/
  107. for( i= 0; i < nlines; i++)
  108. {
  109.   itemP = xmlrpc_string_new(&env, lineptr[i]);
  110.       xmlrpc_array_append_item(&env, myArrayP, itemP);
  111.   xmlrpc_DECREF(itemP);
  112. }
  113. /*test...*/
  114. printf("test input array size:%d\n\n\n",xmlrpc_array_size(&env,myArrayP));  /*Array size*/

  115. /* Make the remote procedure call */
  116. resultArrayP = xmlrpc_array_new(&env);
  117. die_if_fault_occurred(&env);
  118. resultArrayP = xmlrpc_client_call(&env, serverUrl, methodName, "(iA)", (xmlrpc_int32)nlines, myArrayP);
  119. die_if_fault_occurred(&env);


  120. /* print  sort string out. */
  121. printf(">>>string after sort.\n");
  122. nlines =  xmlrpc_array_size(&env,resultArrayP);
  123. for( i= 0; i < nlines; i++)
  124. {
  125.   xmlrpc_array_read_item(&env, resultArrayP, i, &itemP);
  126.   xmlrpc_read_string(&env, itemP, &line );
  127.   printf("%s\n",line);
  128.   xmlrpc_DECREF(itemP);
  129. }
  130. die_if_fault_occurred(&env);

  131. /* Dispose of our result value. */
  132. xmlrpc_DECREF(myArrayP);
  133. xmlrpc_DECREF(resultArrayP);

  134. /* Shutdown our XML-RPC client library. */
  135. xmlrpc_env_clean(&env);
  136. xmlrpc_client_cleanup();

  137. return 0;
  138. }


  139. /*******************************************************************************************************
  140. *Application:xmlrpc_server.c
  141. *description:A simple string sort XML-RPC client program written in C.
  142. *author:hemmingway
  143. *time:26/05/2012 09:18:09
  144. *compile with: gcc -Wall -c -I/usr/local/include -O2 -o xmlrpc_server.o xmlrpc_server.c
  145.     gcc -lxmlrpc_server -lxmlrpc_server_abyss -lxmlrpc -lxmlrpc_util -lcurl -o xmlrpc_server xmlrpc_server.o
  146. *************************************************************************************************************/

  147. #include <stdio.h>
  148. #include <stdlib.h>
  149. #include <string.h>
  150. #include <unistd.h>
  151. #include <xmlrpc-c/base.h>
  152. #include <xmlrpc-c/server.h>
  153. #include <xmlrpc-c/server_abyss.h>
  154. #include <xmlrpc-c/util.h>
  155. #define SLEEP(seconds) sleep(seconds);
  156. /*qsort:sort v[left]...v[right] into increasing order*/
  157. void str_qsort(char *v[], int left, int right)
  158. {
  159. int i,last;
  160. void swap(char *v[], int i, int j);

  161. if(left >= right)   /*do nothing if array contains fewer than two elements*/
  162.   return;
  163. swap(v,left,(left + right)/2); /*move partition elem*/
  164. last = left;
  165. for(i = left + 1; i <= right; i++)
  166.   if( strcmp(v[i],v[left]) < 0 )
  167.    swap(v, ++last,i);
  168. swap(v,left,last);
  169. str_qsort(v, left,last-1);
  170. str_qsort(v, last+1, right);
  171. return;
  172. }
  173. /*swap: interchange v[i] and v[j]*/
  174. void swap(char *v[], int i, int j)
  175. {
  176. char *temp;
  177. temp = v[i];
  178. v[i] = v[j];
  179. v[j] = temp;
  180. return ;
  181. }
  182. /*compare_rise: for qsort*/
  183. int compare_rise(const void *a,const void *b)
  184. {
  185. return *(char*)a - *(char*)b;
  186. }
  187. /*sample_qsort:sort string's*/
  188. static  xmlrpc_value *
  189. sample_qsort(xmlrpc_env *   const envP,
  190.            xmlrpc_value * const paramArrayP,
  191.            void *         const usr_data)
  192. {

  193.      xmlrpc_value *arrayP;
  194. xmlrpc_value *retval;
  195. xmlrpc_int32 nlines;
  196. char *line;

  197. xmlrpc_decompose_value(envP, paramArrayP, "(iA)", &nlines, &arrayP);
  198. if (envP->fault_occurred)
  199.         retval = NULL;
  200. else
  201. {
  202.   size_t size = xmlrpc_array_size(envP, arrayP);
  203.   fprintf(stderr,"service get of array size: %d\n", size);
  204.   if (envP->fault_occurred)
  205.              retval = NULL;
  206.          else   /*sort string*/
  207.   {
  208.     retval = xmlrpc_array_new(envP);
  209.              unsigned int i;
  210.                for (i = 0; i < size && !envP->fault_occurred; ++i)
  211.     {
  212.                     xmlrpc_value * itemP;
  213.                   itemP = xmlrpc_array_get_item(envP, arrayP, i);
  214.                         if (!envP->fault_occurred)
  215.      {
  216.       xmlrpc_read_string(envP, itemP, &line );
  217.       fprintf(stderr,"server test output:%s\n",line);
  218.       /*here we sort our current string*/
  219.       qsort(line, strlen(line), sizeof (char), compare_rise);
  220.       /*build sort string to retval*/
  221.       itemP = xmlrpc_string_new(envP, line);
  222.       xmlrpc_array_append_item(envP, retval, itemP);
  223.                     } /*end if */
  224.      xmlrpc_DECREF(itemP);
  225.                 }/*end for*/
  226.    
  227.     xmlrpc_DECREF(arrayP);
  228.                if (envP->fault_occurred)
  229.                    retval = NULL;
  230.        }/*end second else*/
  231. }/*end firt else*/
  232.     /* Return our result. */
  233.     return  retval;
  234. }
  235. int main(int argc, char **argv)
  236. {

  237. xmlrpc_server_abyss_parms serverparm;
  238. xmlrpc_registry * registryP;
  239. xmlrpc_env env;
  240. xmlrpc_env_init(&env);

  241. registryP = xmlrpc_registry_new(&env);

  242. /*xmlrpc_registry_add_method往服務器注冊一個新的方法。
  243. 所謂方法就是可以提供給客戶端的一個調用方法。
  244. 需要輸入方法名,以及方法的實現函數指針。
  245. */
  246. xmlrpc_registry_add_method(&env, registryP, NULL, "string.qsort", &sample_qsort, NULL);

  247. serverparm.config_file_name = NULL;
  248. serverparm.registryP = registryP;
  249. serverparm.port_number = 8080;
  250. serverparm.log_file_name = "/tmp/xmlrpc_log";

  251. printf("Starting XML-RPC server...\n");

  252. /*xmlrpc_server_abyss啟動服務,這是個循環函數*/
  253. xmlrpc_server_abyss(&env, &serverparm, XMLRPC_APSIZE(registryP));

  254.     return 0;
  255. }


復制代碼


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 国产一区二区精品自拍 | 狠狠色狠狠色综合日日92 | 玩丰满女领导对白露脸hd | 国产精品一区二区福利视频 | 在线国产99 | 欧美日韩精品专区 | 久久机热| 国产二区视频 | 国产精品视频久久 | 成人黄色网址大全 | a黄在线观看| 亚洲精品9999 | 免费看av大片 | 人人干在线视频 | 91中文在线观看 | 国产精品久久99 | 国产日韩欧美中文 | 中文字幕精品视频 | 欧美激情精品久久久久 | 亚洲精品一区二区三区在线观看 | 91最新入口| 久久久99国产精品免费 | 国产日韩一区 | 国产精品久久久久久一区二区三区 | 国产午夜一级 | 成人二区 | 国产成人久久久 | 久久精品小短片 | 在线观看亚洲精品 | 亚洲一区二区黄 | 一区二区三区四区视频 | 国产a视频 | 9久9久9久女女女九九九一九 | 色又黄又爽网站www久久 | 在线看91| 射久久| 97免费视频在线观看 | 国产成在线观看免费视频 | 精国产品一区二区三区四季综 | 真人女人一级毛片免费播放 | 国产一区二区三区日韩 |