Невозможно отправить сообщение по одному и тому же соединению из двух разных процессов в contiki

Я создал два процесса в Contiki. В первом процессе я создал UDP-соединение и отправил с него тестовое сообщение, и это сообщение было успешно получено на другом конце.

Но когда я пытаюсь отправить сообщение из другого процесса, оно не доставляется.

Я пытаюсь использовать следующий код:

Код:

#define SERVER_IP             "fe80::9a07:2dff:fe3c:8d01" //"::"
#define CLIENT_PORT           61617
#define SERVER_PORT           61616
#define PING_TIMEOUT              (CLOCK_SECOND / 4)
#define CLIENT_SEND_INTERVAL      (CLOCK_SECOND * 2.5)
/*---------------------------------------------------------------------------*/
static uip_ipaddr_t server_addr;
static struct uip_icmp6_echo_reply_notification icmp_notification;
static uint8_t echo_received;
static struct uip_udp_conn *conn;
static struct etimer timer;
/*---------------------------------------------------------------------------*/
PROCESS(createConnection, "Creating Connection");
PROCESS(sendingMessage, "Sending Message");
AUTOSTART_PROCESSES(&createConnection);
/*---------------------------------------------------------------------------*/
void icmp_reply_handler(uip_ipaddr_t *source, uint8_t ttl,
                   uint8_t *data, uint16_t datalen)
{
  printf("echo response received\n");
  echo_received = 1;
}
static void timeout_handler(void)
{
    char c[] = "TEST MESSAGE";
    send_message(conn, c, strlen(c));
    printf("A new message is sent\n");
}
PROCESS_THREAD(createConnection, ev, data)
{
    PROCESS_BEGIN();
    uiplib_ipaddrconv(SERVER_IP, &server_addr);
    uip_icmp6_echo_reply_callback_add(&icmp_notification, icmp_reply_handler);
    do 
    {
        etimer_set(&timer, PING_TIMEOUT);
        PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
        uip_icmp6_send(&server_addr, ICMP6_ECHO_REQUEST, 0, 20);        
    } while(!echo_received);
    conn = udp_new(&server_addr, UIP_HTONS(SERVER_PORT), NULL);
    udp_bind(conn, UIP_HTONS(CLIENT_PORT));
    etimer_set(&timer, CLIENT_SEND_INTERVAL);
    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
    timeout_handler();  
    process_start(&sendingMessage,NULL);    
    PROCESS_END();
}
PROCESS_THREAD(sendingMessage, ev, data)
{
    PROCESS_BEGIN();
    printf("In second process\n");
    etimer_set(&timer, CLIENT_SEND_INTERVAL);
    PROCESS_WAIT_EVENT_UNTIL(etimer_expired(&timer));
    timeout_handler();
    PROCESS_END();
}

Вывод на стороне отправителя:

With DriverLib v0.47020
TI SmartRF06EB + CC26xx EM
IEEE 802.15.4: Yes, Sub-GHz: No, BLE: Yes, Prop: Yes
 Net: sicslowpan
 MAC: ble-l2cap
 RDC: ble-adapt-par
echo response received
echo response received
A new message is sent
In second process
A new message is sent

Выход на стороне приемника:

Starting Contiki-list-1533-gb7d94ec
With DriverLib v0.47020
TI SmartRF06EB + CC26xx EM
IEEE 802.15.4: Yes, Sub-GHz: No, BLE: Yes, Prop: Yes
 Net: sicslowpan
 MAC: ble-l2cap
 RDC: ble-null-par

rec. message: TEST MESSAGE

0 ответов

Другие вопросы по тегам