2014-02-02 5 views
0

Можно ли отправлять и получать сообщения UDP в том же сценарии bash, используя netcat?Одновременно отправлять и получать сообщения UDP

В Linux я хочу отправить сообщение UDP и получить его вывод в переменной для дальнейшей обработки. В идеале я хочу сделать это в bash, используя netcat, но я открыт для других возможностей (Java должен быть легким, но я не хочу устанавливать дополнительные компоненты, если могу это избежать)

До сих пор я могу выдавать команду echo -ne 'some data' | nc -u 192.168.0.xyz 9760 и см. входящие сигналы, настроив прослушиватель nc -ul 9761 в другом окне. Но вопрос в том, как это можно сделать в одном процессе и иметь выход, назначенный переменной?

Может ли процесс слушателя быть отправлен на задний план в начале сценария? если да, то как это разрушается, когда процесс заканчивается?

ответ

1

Да, вы можете фон слушателю, что-то вроде этого:

nc -ul 9761 >/tmp/foo & 
echo -ne 'some data' | nc -u 192.168.0.xyz 9760 
wait # waits for the backgrounded command to complete 
data=$(</tmp/foo) 
+0

Это хорошо работает ... Как бы вы очистили процесс после этого? – user3262302

-1

Вы можете написать короткие сценарии с использованием Socket программирования. Вам нужно создать Socket и добавить свойства UDP на одном устройстве, а на другом устройстве - ждать входящего сообщения UDP. В основном сообщения принимаются как строка, но вы можете сохранить их в строковой переменной и внести дальнейшие изменения.

s=socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP) //create socket 
sendto(s, message, strlen(message) , 0 , (struct sockaddr *) &si_other, slength) //sender 
recv_len = recvfrom(s, buf, BUFLEN, 0, (struct sockaddr *) &si_other, &slength) //receiver 

Конечно, вам необходимо назначить некоторые другие свойства параметрам сокета. Посмотрите на это Website. Объяснено простыми словами, как вы можете запрограммировать сценарий клиентского сервера, который обменивается данными через udp over IP.

Смежные вопросы