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
两者都有效——它们传递了信息——但线路还没有结束。仅当我关闭 netcat/socat 时,VLC 才会接受该命令。
我监控了连接sockettest
,并且消息在同一行中一个接一个地出现,如下所示:
playpausestopexitadd
我需要结束该行,以便传输的消息如下所示:
play
stop
exit
add
也许数据包还没有结束?
我想知道是否nc
或socat
有选项在一定时间后发送数据包/结束行。
如果我\n
按照@roaima的建议添加到输出中,我就会得到play\nstop\nplay\n
一行。
答案1
我怀疑你的问题更多是因为无论发送UDP数据包都没有在命令中添加换行符(因为它们应该发送"play\n"
而不仅仅是"play"
)。
无论如何,如果您希望为每个 UDP 数据包创建一个新的 TCP 连接,您应该使用udp-recvfrom
而不是udp-listen
in socat
:
socat -u udp-recvfrom:3333,fork tcp:localhost:50000
然后,每个 UDP 数据包都应触发一个 TCP 连接,该连接仅用于发送数据包的内容,然后关闭。
通过执行以下操作进行测试:
echo play | socat -u - udp-sendto:localhost:3333
(发送一个 UDP 数据包,其负载包含 5 个字节"play\n"
)。