Узел A Contiki отправляет данные другому узлу B, я хочу, чтобы узлы A и B отправляли данные через пограничный маршрутизатор на сервер, работающий в Linux
Я могу отправлять данные с узла на серверный код, работающий в Linux, через пограничный маршрутизатор. Я добился этого, используя https://github.com/contiki-os/contiki/blob/master/examples/udp-ipv6/udp-client.c пример кода от Contiki. Я использую код Python для получения этих данных на плате Linux, см. Этот код пользовательского пространства Linux для связи между платой Linux и каждым узлом, на котором работает пример кода contiki udp sender. Давайте назовем узел NODE_A, второй узел NODE_B и плату Linux как NODE_C. Данные NODE_A и NODE_B достигают NODE_C, я также хочу, чтобы NODE_A и NODE_B общались друг с другом. Как я могу заставить NODE_A и NODE_B общаться друг с другом? Спасибо!
1 ответ
На 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))