Пример использования библиотеки XMLRPC - PullRequest
0 голосов
/ 11 декабря 2018

Я пытаюсь использовать 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);
} 

Прямо сейчас, оно проходит этап инициализации, но сталкивается с ошибкой сегмента в клиентском вызове.

Любой имеетидея, что я делаю не так?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...