我可以让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永远不知道何时处理它所获得的字节.
解决这个问题的一种方法是双方都超时......首先以定时结束启动你的客户端(在子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上,通常会很快).