Существует принципиальная разница между потоковыми байтами с TCP и UDP ...
- TCP передает EOF, когда видит конец потока байтов
- UDP просто прекращает отправку данных (т. Е. Не уведомляет другой конец об остановке данных)
В результате ваш пример TCP работает, а пример UDP - нет, потому что mplayer никогда не знает, когда обрабатывать получаемые байты.
Одним из способов решения этой проблемы является тайм-аут с обеих сторон ... Сначала запустите ваш клиент с синхронизированным завершением (фоновая часть nc в подоболочке, чтобы он не блокировался):
(nc -q 1 -u -l -p 65535 > [movie].avi&); sleep 10; fuser -k 65535/udp;\
mplayer [movie].avi; rm [movie].avi
Далее запустите ваш сервер ... в этом случае я показываю, что он отправляет файл на 192.168.12.238 по udp / 65535
(cat [movie].avi | nc -u 192.168.12.238 65535&); sleep 10; \
fuser -n udp ,192.168.12.238,65535 -k
Наконец, убедитесь, что вы выбрали достаточное время ожидания для последовательности команд оболочки и завершения передачи по сети (что обычно довольно быстро, если вы подключены к проводной локальной сети Ethernet).