0

TCPポートをリッスンして書き込むソフトウェアXがあります。つまり、TCP の読み取りと書き込みを行うサーバー ソケットとクライアントを作成します。

また、ソフトウェア X を提供する形式でデータを受け取り、データをシリアルに送り返すことができるシリアル デバイス ttyUSB0 があります。

ソフトウェア X とシリアル ttyUSB0 に対して透過的に見えるように、シリアルから TCP に、またはその逆にデータをフィードしたいと考えています。

私はsocatを使おうとしていました。お気に入り、

 socat -d -d -d -d -x TCP-LISTEN:7758,fork,reuseaddr FILE:/dev/ttyUSB0,b9600,raw

しかし、うまくいかないようです。TCP ポートのリスナーがバインディングをブロックしているように見えます。私は持っている

E bind(3, {AF=2 0.0.0.0:7758}, 16): アドレスは既に使用されています

誰かが私の問題を手伝ってくれませんか?

4

2 に答える 2

4

一部のコメンターが既に述べたように、2 つのリスナーで TCP 接続を確立することはできません。TCP 接続の場合、常にサーバー (リスナー) とクライアントが必要です。

ソフトウェアはすでにサーバー (ポート 7758 でリッスン) であるため、socat はクライアント モードで実行する必要があります (サーバーに接続します)。

TCP:<host>:<port>これは、たとえば次のようにオプションで実行できます(例を調整しましたが、テストされていません!):

socat -d -d -d -d -x TCP:localhost:7758 FILE:/dev/ttyUSB0,b9600,raw
于 2013-11-21T13:17:55.153 に答える
1

これは TCP では不可能です。SO_REUSSEADDR を指定することはできますが、これによって両方のリッスン アプリケーションがデータを受信することにはならないことに注意してください。一方のアプリ (OS によって「ランダム」に決定される) のみがデータを受信し、もう一方のアプリは何も「受信」しません。

マルチキャスト UDP を使用できる場合は、これを行うことができます。

2 つのアプリケーションが同じポートをリッスンできますか? を参照してください。

于 2013-11-21T13:25:32.150 に答える