XMLRPC库用例

时间:2018-12-11 20:50:20

标签: c

我正在尝试使用XMLRPC作为客户端与服务器进行通信(已经编写并证明有效)。服务器具有一个名为“ Test”的函数,该函数接受一个结构参数,该结构参数包含一个单独的“ string”条目。

在客户端,我使用C语言,无法弄清楚为什么我的代码遇到分段错误,并且也不知道实现代码的最佳方法是什么。

这是我所拥有的:

#include <stdio.h>
#include <stdlib.h>
#include <xmlrpc.h>
#include <xmlrpc_client.h>

#define SERVER_URL "http://localhost:1001"
#define NAME "Xmlrpc-c Test Client"
#define VERSION "1.0"

static void dieIfFaultOccurred (xmlrpc_env * const envP) {
    if (envP->fault_occurred) {
        fprintf(stderr, "ERROR: %s (%d)\n",envP->fault_string, envP->fault_code);
        exit(1);
    }
}

struct test {
    char str[10];
};

int main(int argc, char** argv) {
  /* Initialize our error-handling environment. */
  xmlrpc_env env;
  xmlrpc_env_init(&env);

  xmlrpc_value *result;
  xmlrpc_int32 sum;
  xmlrpc_client * clientP;

  struct test rt;
  sprintf(rt.str, "hello");

  char* methodName = "Test";

  printf("\nStarting XML-RPC Client\n\n");

  /* Create the global XML-RPC client object. */
  xmlrpc_client_init2(&env, XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION, NULL, 0);
  dieIfFaultOccurred(&env);

  printf("Init Success!\n");

  //result = xmlrpc_client_call(&env, SERVER_URL, methodName, "{s:s}", rt);
  dieIfFaultOccurred(&env);

  printf("Received Result!\n");

  xmlrpc_read_int(&env, result, &sum);
  dieIfFaultOccurred(&env);

  printf("Read Value!\n");
  /* Dispose of our result value. */
  xmlrpc_DECREF(result);

  /* Clean up our error-handling environment. */
  xmlrpc_env_clean(&env);

  /* Shutdown our XML-RPC client library. */
  xmlrpc_client_cleanup();

  return(0);
} 

现在,它已经超过了初始化步骤,但在客户端调用中遇到了段错误。

有人知道我在做什么错吗?

0 个答案:

没有答案