Mih*_*scu 6 bridge tcp udp packet socat
UDP - 必须监听端口。TCP - 必须连接到服务器。
我试过netcat
和socat
。
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)
也许数据包没有结束?
我想知道是否nc
或socat
可以选择在一段时间后发送数据包/结束行。
如果我\n
按照@roaima 的建议添加到输出中,我会得到play\nstop\nplay\n
一行。
Sté*_*las 11
我怀疑您的问题更多,因为发送 UDP 数据包的任何内容都没有在命令中添加换行符(因为它们应该发送"play\n"
而不仅仅是"play"
)。
在任何情况下,如果您希望为每个 UDP 数据包创建一个新的 TCP 连接,您应该使用inudp-recvfrom
代替:udp-listen
socat
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"
)。