使用 socat/netcat 创建 UDP 到 TCP 桥接器以中继 vlc 媒体播放器的控制命令

Mih*_*scu 6 bridge tcp udp packet socat

UDP - 必须监听端口。TCP - 必须连接到服务器。

我试过netcatsocat

nc -v -u -l -p 3333 | nc -v 127.0.0.1 50000

socat -v UDP-LISTEN:3333,fork TCP:localhost:50000
Run Code Online (Sandbox Code Playgroud)

两者都在工作——他们传递了信息——但这条线并没有结束。如果我关闭 netcat/socat,VLC 只会接受命令。

我监视了与的连接,sockettest消息在同一行中一个接一个,如下所示:

playpausestopexitadd
Run Code Online (Sandbox Code Playgroud)

我需要结束该行,以便传输的消息如下所示:

play
stop
exit
add
Run Code Online (Sandbox Code Playgroud)

也许数据包没有结束?

我想知道是否ncsocat可以选择在一段时间后发送数据包/结束行。

如果我\n按照@roaima 的建议添加到输出中,我会得到play\nstop\nplay\n一行。

Sté*_*las 11

我怀疑您的问题更多,因为发送 UDP 数据包的任何内容都没有在命令中添加换行符(因为它们应该发送"play\n"而不仅仅是"play")。

在任何情况下,如果您希望为每个 UDP 数据包创建一个新的 TCP 连接,您应该使用inudp-recvfrom代替:udp-listensocat

socat -u udp-recvfrom:3333,fork tcp:localhost:50000
Run Code Online (Sandbox Code Playgroud)

然后每个 UDP 数据包都应该触发一个 TCP 连接,该连接仅用于发送数据包的内容然后关闭。

执行以下测试:

echo play | socat -u - udp-sendto:localhost:3333
Run Code Online (Sandbox Code Playgroud)

(它发送一个 UDP 数据包,其有效负载包含 5 个字节"play\n")。