web-dev-qa-db-ja.com

TCPブリッジへのUDPを作成し、socat / netcatとブリッジして、vlcメディアプレーヤーの制御コマンドを中継します。

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

両方とも機能し、メッセージを配信しましたが、回線は終了していません。 VLCは、netcat/socatを閉じた場合にのみコマンドを受け取ります。

sockettestを使用して接続を監視したところ、次のように同じ行にメッセージが次々に表示されました。

playpausestopexitadd

送信するメッセージが次のようになるように、行を終了する必要があります。

play
stop
exit
add

たぶんパケットが終了していませんか?

ncまたはsocatに、一定時間後にパケット/エンドラインを送信するオプションがあるかどうか疑問に思っています。

@roaimaの提案に従って\nを出力に追加すると、play\nstop\nplay\nが1行で表示されます。

4
Mihai Popescu

UDPパケットを送信するものはコマンドに改行文字を追加していないため("play\n"だけでなく"play"を送信する必要がある場合など)、問題はさらに大きいと思います。

いずれの場合も、UDPパケットごとに新しいTCP接続を作成する場合は、socatudp-recvfromではなくudp-listenを使用する必要があります。

socat -u udp-recvfrom:3333,fork tcp:localhost:50000

次に、すべてのUDPパケットが1つのTCP接続をトリガーする必要があります。これは、パケットのコンテンツを送信するためだけに起動され、閉じられます。

次のようにしてテストします。

echo play | socat -u - udp-sendto:localhost:3333

(ペイロードに5バイトの"play\n"が含まれるUDPパケットを送信します)。

9