4

シリアルポート経由で通信するソフトウェアをテストするために、tcp 接続を単一の仮想 tty に多重化できる必要があります。次のコマンドを使用して、tcp ポートをリッスンし、データを PTY に転送するサーバーを作成しました。

socat -d -d PTY,link=/dev/ttyV1,waitslave,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork

私の問題は、ポート 11313 の tcp クライアントが切断されたときに、socat が /dev/ttyV1 へのリンクを削除し、接続されている他のすべてのユーザーへのセッションを強制終了することです。

このリンクを保持する方法はありますか? それとも、socat の外部で疑似 tty を作成して、維持することを心配する必要がないようにしますか? /dev/tty1 と /dev/ttyS1 を試しましたが、うまくいきませんでした。これらに対する私のコマンドは次のとおりです。

socat -d -d file:/dev/tty1,nonblock,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork

私の要件: 一方の端でソフトウェアをシリアル tty に接続し、もう一方の端で多数の tcp クライアントを接続できること。TCP クライアントのメッセージングは​​、メッセージが重なって到着しないように、適切にシリアル化および多重化されます。

4

2 に答える 2

7

わかりました、私は自分で解決策を見つけたようです。最初に仮想ヌル モデム ペアを作成してから、仮想ヌル モデム ペアの一方の端を開き、それを TCP リスナーにリンクする必要があります。

socat -d -d PTY,raw,echo=0,link=/dev/ttyVA00 PTY,raw,echo=0,link=/dev/ttyVB00

それで

socat -d -d open:/dev/ttyVA00,nonblock,echo=0,raw TCP-LISTEN:11313,reuseaddr,fork 

必要な数のクライアントを接続でき、すべてが機能しているようです。

于 2013-12-20T19:48:28.440 に答える