2 つの TCP ソケット間に目に見えないリレーを確立する Python コードを書き込もうとしています。私の現在のテクニックは、2 つのスレッドをセットアップすることです。各スレッドは、特定の方向で一度に 1kb のデータを読み書きします (つまり、A から B に 1 スレッド、B から A に 1 スレッド)。
これは一部のアプリケーションとプロトコルで機能しますが、絶対確実というわけではありません。この Python ベースのリレーを実行すると、特定のアプリケーションが異なる動作をすることがあります。クラッシュするものさえあります。
これは、私がソケット A で読み取りを実行し終えると、そこで実行されているプログラムが、そのデータが既に B に到着したと見なしているからだと思います。 B がデータを受信する準備ができていない (それによってsend()
しばらくブロックする) 状況では、A は B にデータを正常に送信したと信じている状態になりましたが、私はまだデータを保持しており、send()
呼び出しを待っています。実行します。これが、現在の中継コードを使用しているときに一部のアプリケーションで見つかった動作の違いの原因だと思います。私は何かを見逃しましたか、それとも正しいですか?
もしそうなら、私の本当の質問は: この問題を回避する方法はありますか? B がデータを受信する準備ができていることがわかっている場合にのみ、ソケット A から読み取ることは可能ですか? または、[すでに開いて確立されている] TCPソケット間で真に「見えない」双方向リレーを確立するために使用できる別の手法はありますか?