Tcp
使用 socat/netcat 創建 UDP 到 TCP 橋以中繼 vlc 媒體播放器的控制命令
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
進入一行。
我懷疑您的問題更多是因為發送 UDP 數據包的任何內容都不會在命令中添加換行符(因為它們應該發送
"play\n"
而不僅僅是"play"
)。在任何情況下,如果您希望為每個 UDP 數據包創建一個新的 TCP 連接,您應該使用
udp-recvfrom
而不是udp-listen
insocat
:socat -u udp-recvfrom:3333,fork tcp:localhost:50000
然後每個 UDP 數據包應該觸發一個 TCP 連接,該連接僅用於發送數據包的內容,然後關閉。
通過執行測試:
echo play | socat -u - udp-sendto:localhost:3333
(它發送一個 UDP 數據包,其有效負載包含 5 個字節
"play\n"
)。