我可以让netcat使用TCP流式传输视频

  {server}  cat [movie].avi | nc [client ip address] 65535

  {client}  nc -l -p 65535 | mplayer -

我尝试使用-u命令通过UDP发送,但这不起作用
  {server}  cat [movie].avi | nc -u [client ip address] 65535

  {client}  nc -u -l -p 65535 | mplayer -

有任何想法吗?

最佳答案

使用TCP和UDP传输流字节之间有根本的区别...

  • TCP看到字节流
  • 的末尾时,它会与EOF通信
  • UDP只是停止发送数据(即它不会通知数据停止的另一端)

  • 结果是您的TCP示例可以工作,但UDP示例却不能,因为mplayer从不知道何时处理它获取的字节。

    解决此问题的一种方法是在两端都设置超时...首先用定时完成方式启动客户端(将nc部分放在子shell中以使其不会阻塞):
    (nc -q 1 -u -l -p 65535 > [movie].avi&); sleep 10; fuser -k 65535/udp;\
        mplayer [movie].avi; rm [movie].avi
    

    下一步启动您的服务器...在这种情况下,我将其显示为将文件推送到udp/65535上的192.168.12.238
    (cat [movie].avi | nc -u 192.168.12.238 65535&); sleep 10; \
        fuser -n udp ,192.168.12.238,65535 -k
    

    最后,请确保选择足够长的超时时间来排序Shell命令并完成网络传输(如果您在有线以太网LAN上,这通常会很快)。

    10-08 02:29