首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C代码,RPC错误"RPC:无法编码参数“

C代码,RPC错误"RPC:无法编码参数“
EN

Stack Overflow用户
提问于 2016-04-28 03:25:25
回答 1查看 2.5K关注 0票数 1

我看到了这个question,但它似乎不适用。

下面是我的函数,它完成了客户端代码中最繁重的工作:

代码语言:javascript
复制
void
database_1(char *host, char *action, char *message)
{
    printf("Action: %s\n", action);
    printf("Message: %s\n", message);
    CLIENT *clnt;
    rpc_args  *result_1;
    //struct rpc_args  action_1_arg;

    //rpc arguments struct to pass to server
    struct rpc_args *args = malloc(sizeof(struct rpc_args));

    char *id = generate_id();
    if (strcmp(action, "GET") == 0) {
        printf("Client: GET request\n");
        strcpy(args->action, action);
        strcpy(args->id, id);
    } else if(strcmp(action, "PUT") == 0) {
        printf("Client: PUT request\n");
        strcpy(args->action, action);
        strcpy(args->id, id);
        strcpy(args->message.content, message);
    }

#ifndef DEBUG
    clnt = clnt_create (host, DATABASE, ASSIGNMENT_7, "udp");
    if (clnt == NULL) {
        clnt_pcreateerror (host);
        exit (1);
    }
#endif  /* DEBUG */

    result_1 = action_1(args, clnt);
    if (result_1 == (rpc_args *) NULL) {
        clnt_perror (clnt, "call failed");
    }
    free(args);
#ifndef DEBUG
    clnt_destroy (clnt);
#endif   /* DEBUG */
}

这是我的输出:

代码语言:javascript
复制
./database_client eecslinab3.case.edu GET 
running client, main
Action: GET
Message: (null)
hostname is eecslinab3
The process id is 24697
The unique id is eecslinab324697
Client: GET request
call failed: RPC: Can't encode arguments

Database.x

代码语言:javascript
复制
struct message {
    char content[2000];
};

struct rpc_args {
    char action[20];
    char id[1024];
    struct message message;
};

program DATABASE {
    version ASSIGNMENT_7 {
        rpc_args ACTION(struct rpc_args) = 1;
    } = 1;
} = 0x20fff100;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-28 05:41:58

一位朋友帮我解决了这个问题,但没有给我详细说明修复的原因或方法。基本上,我减少了char数组在我的结构中的大小,它起作用了。与您可以通过UDP发送的数据限制有关。

代码语言:javascript
复制
struct rpc_args {
    char action[20];
    char id[80];
    char message[80];
};

program DATABASE {
    version ASSIGNMENT_7 {
        rpc_args ACTION(struct rpc_args) = 1;
    } = 1;
} = 0x20fff100;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36904700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档