gpt4 book ai didi

将 IP 地址复制到 UIP ICMP PAYLOAD 中

转载 作者:行者123 更新时间:2023-11-30 16:45:56 24 4
gpt4 key购买 nike

我正在尝试改进 RPL 协议(protocol),因此实现了新的控制消息。我可以发送整数,但不能发送 IP 地址。有谁能帮忙看病吗?我正在处理位于 contiki/core/net/rpl 的文件 rpl-icmp6.c

这是我的第一个函数,它正在接收数据:

static void
tru_input(void)
{
int trustValue;
uip_ipaddr_t *trustAddr;
unsigned char *buffer;
buffer = UIP_ICMP_PAYLOAD;

trustValue = buffer[0];
memcpy(&trustAddr, buffer[1], 16);

PRINT6ADDR(trustAddr);

}

这是发送数据的函数:

void
tru_output(uip_ipaddr_t *addr, uip_ipaddr_t *trustAddr, int *trustValue)
{
unsigned char *buffer;
buffer = UIP_ICMP_PAYLOAD;
buffer[0] = &trustValue;
memcpy(buffer[1], &trustAddr, 16);
uip_icmp6_send(addr, ICMP6_RPL, RPL_CODE_TRU, 1);
}

我收到 java.lang.ArrayIndexOutOfBoundsException:-1。有人可以帮助我吗?

编辑:

这是我的新代码,可以运行:

static void
tru_input(void)
{
int trustValue;
uip_ipaddr_t trustAddr;
unsigned char *buffer;

buffer = UIP_ICMP_PAYLOAD;

trustValue = buffer[0];
memcpy(&trustAddr, buffer + 1, 16);

PRINT6ADDR(trustAddr);
PRINTF("\n");

}
/*---------------------------------------------------------------------------*/
void
tru_output(uip_ipaddr_t *addr, uip_ipaddr_t *trustAddr, int trustValue)
{
/*Array OF byte: Find out how to enter all the bytes into the PAYLOAD. */
unsigned char *buffer;
buffer = UIP_ICMP_PAYLOAD;
buffer[0] = trustValue;

memcpy(buffer + 1, trustAddr, 16);
uip_icmp6_send(addr, ICMP6_RPL, RPL_CODE_TRU, 17);
}

最佳答案

memcpy(&trustAddr, buffer[1], 16);

您正在将指向 buffer[1](即一个字符)的值复制到指向 trustAddr 的值我想你想传递缓冲区[1]的地址:

memcpy(&trustAddr, buffer + 1, 16);

在 tru_output 中也是如此(您不需要将 trustAddr 的属性传递给 memcpy,因为您已经将其声明为指针:

memcpy(buffer+1, trustAddr, 16);

我发现您还需要用 16 个字节初始化 trustAddr,因为您要将内存复制到随机内存区域,所以不要将 trustAddr 声明为指针:

uip_ipaddr_t trustAddr;

关于将 IP 地址复制到 UIP ICMP PAYLOAD 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43936589/

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