gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:46:25 26 4
gpt4 key购买 nike

我想使用 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 - %s\n", 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: %s\n", clnt_sperror(cl, argv[1])); }
else
{
printf("%ld\n", *out);
}
free(buffer);
}

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

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

最佳答案

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

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

关于c - 从客户端发送结构并使用 SUN-RPC 将结构保存到链表中的服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19292609/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com