Contiki узел A отправляет данные другому узлу B, я хочу, чтобы узлы A и B отправляли данные через пограничный маршрутизатор на сервер, работающий в Linux - PullRequest
0 голосов
/ 26 ноября 2018

Я могу отправить данные с узла на серверный код, работающий в Linux, через пограничный маршрутизатор.Я добился этого, используя https://github.com/contiki-os/contiki/blob/master/examples/udp-ipv6/udp-client.c пример кода от Contiki.Я использую код Python для получения этих данных на плате Linux, см. код пользовательского пространства Linux для связи между платой Linux и каждым узлом, на котором работает пример кода отправителя contiki udp .Давайте назовем узел NODE_A, второй узел NODE_B и плату Linux как NODE_C.Данные NODE_A и NODE_B достигают NODE_C, я также хочу, чтобы NODE_A и NODE_B общались друг с другом.Как я могу заставить NODE_A и NODE_B общаться друг с другом?Спасибо!

1 Ответ

0 голосов
/ 29 ноября 2018

В NODE_A отредактируйте пример файла udp_client.c примерно так: адрес NODE_B: fd00 :: abcd: aaaa: bbbb, NODE_B: fd00: dddd: aaaa: bbbb NODE_C: fd00 :: 1

uip_ipaddr_t NODE_B;
uip_ipaddr_t NODE_C;
uip_ip6addr(&NODE_C, 0xfd00, 0, 0, 0, 0, 0, 0, 1);
uip_ip6addr(&NODE_B, 0xfd00, 0, 0, 0, 0, 0xabcd, 0xaaaa, 0xbbbb);
/* new connection with remote host */
client_conn_NODE_B = udp_new(&NODE_C, UIP_HTONS(3000), NULL);
udp_bind(client_conn_NODE_B, UIP_HTONS(3001));
/* new connection with remote host */
client_conn_NODE_B = udp_new(&NODE_B, UIP_HTONS(3002), NULL);
udp_bind(client_conn_NODE_B, UIP_HTONS(3003));

на NODE_B

uip_ipaddr_t NODE_A;
uip_ipaddr_t NODE_C;
uip_ip6addr(&NODE_C, 0xfd00, 0, 0, 0, 0, 0, 0, 1);
uip_ip6addr(&NODE_A, 0xfd00, 0, 0, 0, 0, 0xdddd, 0xaaaa, 0xbbbb);
/* new connection with remote host */
client_conn_NODE_B = udp_new(&NODE_C, UIP_HTONS(3000), NULL);
udp_bind(client_conn_NODE_B, UIP_HTONS(3001));
/* new connection with remote host */
client_conn_NODE_B = udp_new(&NODE_B, UIP_HTONS(3003), NULL);
udp_bind(client_conn_NODE_B, UIP_HTONS(3002));

NODE_C - это моя Linux-плата. Я написал тестовый код примерно так

import socket, struct

UDP_LOCAL_IP = 'aaaa::1'
UDP_LOCAL_PORT = 5678

try:
    socket_rx = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
    socket_rx.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
    socket_rx.bind((UDP_LOCAL_IP, UDP_LOCAL_PORT))
except Exception:
    print "ERROR: Server Port Binding Failed"

print 'UDP server ready: %s'% UDP_LOCAL_PORT
print

while True:
    data, addr = socket_rx.recvfrom(1024)
    print "address : ", addr
    print "received message: ", data
    print "\n"
    socket_rx.sendto("Hello from serevr\n", (UDP_REMOTE_IP, UDP_REMOTE_PORT))
...