Если я запустил простой 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 локальный хост 9000 Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно! $ echo -e "the" | nc -vvuw 1 локальный хост 9000 Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно! $ echo -e "udp" | nc -vvuw 1 локальный хост 9000 Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно! $ echo -e "пакеты" | nc -vvuw 1 локальный хост 9000 Подключение к порту localhost 9000 [udp / cslistener] выполнено успешно!
И сервер netcat теперь получает их все:
$ nc -kluvw 1 localhost 9000 XXXXвсе XXXX XXXXudp XXXXпакеты
Это была интересная проблема, надеюсь, это ответит на ваш вопрос.