C语言 从客户端发送结构并使用 SUN-RPC 保存到链表中的服务器



我想使用 RPC 编写一个服务器/客户端程序,该程序将结构从客户端(包含一些字符串(传输到服务器。此结构必须使用链表保存在服务器上。此时,我有以下代码:

.x 文件:

struct paper_node
{
    long id;
    string author<>;
    struct paper_node *next;
};
struct add_in
{
    string author<>;
};
typedef struct paper_node *list_node;

服务器

add_out *add_proc_1_svc(add_in *in, struct svc_req *rqstp)
{
    static add_out out;
    static long id = 1;
    static paper_node *list = NULL;
    //paper_node *p, *q;
    paper_node *pointer, *new_paper;
    new_paper = (paper_node *) malloc(sizeof(paper_node));
    new_paper->id = id;
    new_paper->author = in->author;
    new_paper->next = NULL;
    if (list == NULL)
    {
        list = new_paper;
    }
    else
    {
        for (pointer = list; pointer->next != NULL; pointer = pointer->next);
        pointer->next = new_paper;
    }
    printf("%ld - %sn", list->id, (char *)list->author);
    out = id;       
    id += 1;
    return(&out);
}

客户

void handle_new_paper(char **argv, CLIENT *cl)
{   
    add_in in;
    add_out *out;
    buffer = read_new_paper(argv);
    in.author = argv[3];
    out = add_proc_1(&in, cl);
    if (out == NULL) { printf("Error: %sn", clnt_sperror(cl, argv[1])); }
    else
    {
        printf("%ldn", *out);
    }
    free(buffer);
}

服务器似乎没有将字符串正确添加到列表中。打印 list-id(列表的头部(时,它每次都会打印"1",但它只打印在当前调用时提供给服务器函数的字符串值(而不是列表中第一项的字符串值(。

有人知道哪里出了问题吗?

我只是在这里猜测,但可能是 RPC 实现重用使用的字符串缓冲区,所以in->author总是指向同一个缓冲区?

您可以通过打印每个请求的in->author地址来轻松找到它。

最新更新