Назад | Перейти на главную страницу

заставить netcat прослушивать несколько пакетов UDP

Если я запустил простой слушатель UDP, например:

nc -l -u -p 1234

Тогда я получаю только первый входящий пакет UDP. Например, если я бегу:

$ echo abc | nc -u localhost 1234
  ["abc" appears in output of server as expected]

$ echo abc | nc -u localhost 1234
read(net): Connection refused

используя нулевой тайм-аут (0)

«Сервер»:

nc -kluvw 0 localhost 9000

«Клиент»:

echo -e "all"     | nc -vuw 0 localhost 9000
echo -e "the"     | nc -vuw 0 localhost 9000
echo -e "udp"     | nc -vuw 0 localhost 9000
echo -e "packets" | nc -vuw 0 localhost 9000

Результат:

Connection from 127.0.0.1 port 9000 [udp/*] accepted
all
Connection from 127.0.0.1 port 9000 [udp/*] accepted
the
Connection from 127.0.0.1 port 9000 [udp/*] accepted
udp
Connection from 127.0.0.1 port 9000 [udp/*] accepted
packets

протестировано с:

uname -a
Linux ubuntu 3.2.0-23-generic-pae #36-Ubuntu SMP Tue Apr 10 22:19:09 UTC 2012 i686 i686 i386 GNU/Linux

Я нашел ссылку, которая может вам помочь: netcat: странное поведение с UDP - получает только первый отправленный пакет.

На этом этапе я не знал, что делать, но Натан указал, что если бы я использовал тайм-ауты на клиенте и сервере, то можно было бы отправить несколько пакетов UDP.

Я перезапустил сервер netcat, но на этот раз с таймаутом в 1 секунду:

$ nc -kluvw 1 localhost 9000

А затем начал отправлять UDP-пакеты от клиента netcat также с таймаутом в 1 секунду:

 $ echo -e "all" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "the" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "udp" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!
 $ echo -e "packets" | nc -vvuw 1 localhost 9000
 Connection to localhost 9000 port [udp/cslistener] succeeded!

И сервер netcat теперь получает их все:

$ nc -kluvw 1 localhost 9000
XXXXall
XXXXthe
XXXXudp
XXXXpackets

Это была интересная проблема, надеюсь, это ответит на ваш вопрос.