使用UDP进行Netcat流式传输

时间:2011-11-29 11:01:42

标签: networking tcp streaming udp netcat

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

有什么想法吗?

1 个答案:

答案 0 :(得分:13)

TCP和UDP的流式字节之间存在根本区别......

  • TCP在看到字节流结束时传达EOF
  • UDP只是停止发送数据(即它不会通知数据停止的另一端)

后果是您的TCP示例有效,但UDP示例不起作用,因为mplayer永远不知道何时处理它所获得的字节。

解决这个问题的一种方法是双方都超时......首先以定时结束启动你的客户端(在子shell中背景nc部分,这样它就不会阻塞):

(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,通常会很快)。