Если я запустил простой слушатель 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
Это была интересная проблема, надеюсь, это ответит на ваш вопрос.