我正在尝试改进RPL协议,因此已经实现了新的控制消息。我可以发送整数,但不能发送ip地址。有人可以帮忙吗?我正在使用位于rpl-icmp6.c的文件contiki/core/net/rpl

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

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](即char)的值对应到指向trustAddr的值
我认为您想传递buffer [1]的地址:

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


tru_output中也是如此(您无需将trustAddr的ponter传递给memcpy,因为您已经将其声明为指针了:

memcpy(buffer+1, trustAddr, 16);


我看到您还需要初始化16字节的trustAddr,因为您是将内存处理到随机内存区域,所以不要将trustAddr声明为指针:

uip_ipaddr_t trustAddr;

08-05 00:37