gpt4 book ai didi

c - ONC RPC 从服务器发送结构中的字符

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

当我从服务器向客户端发送字符串时遇到问题,它只发送一个带有数字“1”的字符

rpc.x

struct IdentIP{
char *ip;
int puerto;
};
program SERVIDORCHAT {
version BASICA {
IdentIP query(string) = 3;
} = 1;
} = 0x40001234;

问题出在查询功能上。

rpc.c

IdentIP * query_1_svc(char **nick, struct svc_req *r)
{
static IdentIP result;
result.port = -1;
Client *c;
int i = search_client(*nick);
if (i == -1) // No ha sido encontrado
return (&result);

c = clientes[i];
result.port = ntohs(c->endpoint->sin_port);
result.ip = malloc(sizeof(char)*15);
strcpy(result.ip,inet_ntoa(c->endpoint->sin_addr));

printf("IP: %s\n",result.ip); //HERE PRINTS THE IP CORRECTLY
return (&result);
}

我的第一个想法是,我使用 inet_ntoa 严重更改了格式,或者我没有节省足够的内存,但我尝试了所有方法,但不起作用。

client.c

sscanf(linea, "%s %s", cmd, friend);

/***** Query al servidor del chat ****/
IdentIP *info_friend;
info_friend = query_1(&friend, clnt);
printf("IP: %s PUERTO: %d\n",(*info_friend).ip,(*info_friend).puerto);
//HERE PRINT "IP: 1" WHEN THE IP IS "192.168.1.103"

puerto_destino = (*info_friend).puerto;
strcpy(ip_destino, (*info_friend).ip);

端口工作正常,但无论我做什么,IP 总是打印“1”。我希望有人能找到错误,非常感谢。

最佳答案

字符串未复制到正确的结果缓冲区中:

strcpy(resultado.ip, inet_ntoa(c->endpoint->sin_addr));
return (&resultado);

应该是:

strcpy(result.ip, inet_ntoa(c->endpoint->sin_addr));
return (&result);

最好为 16 个字符的 ip 分配缓冲区,因为您需要为空终止符保留一个字符。

result.ip = malloc(16);

关于c - ONC RPC 从服务器发送结构中的字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37209166/

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