10

我可以让 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 -

有任何想法吗?

4

1 回答 1

13

使用 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 上,这通常相当快)。

于 2011-11-29T15:55:09.437 回答