Я пытаюсь использовать 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);
}
Прямо сейчас, оно проходит этап инициализации, но сталкивается с ошибкой сегмента в клиентском вызове.
Любой имеетидея, что я делаю не так?