使用 UDP 的 Netcat 流式传输

发布于 2024-12-18 16:15:58 字数 340 浏览 2 评论 0原文

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

有什么想法吗?

I can get netcat to stream a video using TCP

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

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

i have tried using the -u command to send via UDP but this doesn't work

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

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

Any ideas?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

墨离汐 2024-12-25 16:15:58

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

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

TCP 结果是您的 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 上)。

There is a fundamental difference between streaming bytes with TCP and UDP...

  • TCP communicates an EOF when it sees the end of the byte-stream
  • UDP just stops sending data (i.e. it doesn't notify the other end of the data stoppage)

The consequences are that your TCP example works, but the UDP example doesn't because mplayer never knows when to process the bytes it is getting.

One way to solve this is with a timeout on both sides... First start your client with a timed finish (backgrounding the nc portion in a subshell so it won't block):

(nc -q 1 -u -l -p 65535 > [movie].avi&); sleep 10; fuser -k 65535/udp;\
    mplayer [movie].avi; rm [movie].avi

Next start your server... in this case, I show it pushing the file to 192.168.12.238 on udp/65535

(cat [movie].avi | nc -u 192.168.12.238 65535&); sleep 10; \
    fuser -n udp ,192.168.12.238,65535 -k

Finally, be sure you choose the timeout to be long enough to sequence the shell commands and finish the network transfer (which is normally rather quick, if you're on a wired ethernet LAN).

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文