2

Pythonでパケットをソケットにキューイングする方法はありますか?ライブラリのようなものを探していましたがlibipq、同等のものが見つかりません。

これが私が達成しようとしていることです:

  1. サーバーとクライアントの間にtcpソケット接続を作成します(両方とも私の制御下にあります)。
  2. データを送信してみてください(障害への接続を待っています-たとえば、ラップトップをシャットダウンしたためにクライアントが接続を失います)
  3. SocketException残りのデータを(キュー内で)待機させたまま、送信しようとしたデータをキャッチして保持します。
  4. 再接続を試みてループに入る(成功が避けられないと仮定して)
  5. 成功したら新しいソケットを作成する
  6. データ送信を再開します

助言がありますか?ツイストはこれを行うことができますか?関与する必要がありpcapyますか?これ(ソケット、キューなど)をCで実行し、Boostを使用してハイブリッドコードを作成する必要がありますか?

前もって感謝します。


編集1:

ニックへの応答:

送信するデータが一般化され、終わりがないという事実を省略しました。このアプリがsshセッションの下にあると考えてください(パケットを覗き見しようとしているわけではありません)。したがって、送信は二国間で行われます。オフィスから自宅に移動し(ラップトップを間に閉じて)、自宅でラップトップを開いて、シームレスにセッションを続行できるようにしたいと考えています。(私はSCREENが存在することを知っています)。これにより、プロキシなしでどのように機能するのか不思議に思うかもしれません。そうではありません、私はそのデザインを説明していません。ブロッククォート

SocketException追加されたコンテキストでは、サーバー側でをキャッチする必要はありません。そのマシンは修正される(または修正されると想定される)ためです。クライアントが再び接続できることを認識すると、サーバーに再接続するだけです。

4

1 に答える 1

0

アプリケーションプロトコルを実装することをお勧めします。クライアントがデータを受信すると、データの各ビットのシリアル番号を使用して、サーバーにデータを確認します。

次にサーバーは、クライアントが次に必要とするシリアル番号を記録して送信します。接続が切断された場合、サーバーは接続を再作成します。

データは任意の方法でバッファリングできますが、開始と終了のデータを取得する場合よりもおそらく少し効率的なdequeを使用して、開始するのは簡単です。list

おそらく、シリアル番号属性を持つPacketオブジェクトと、それとそのデータをバイトストリームにシリアル化および逆シリアル化する方法(たとえば、netstringsを使用)を作成します。次に、これらのパケットを両端キューに保存します。パケットを両端キューからポップし、クライアントから確認応答を受け取ったときはいつでも、次の確認応答を送信します。

このようなプロトコルには多くのコーナーケースがあり、タイムアウトが必要であり、一般的にデバッグが面倒です。アイデアが必要な場合は、いつかSMTPサーバーのソースコードを確認してください。

ソケットに関しては、通常のPythonソケットを使用してこれを簡単に実装し、どのように動作するかを確認できます。一度にたくさんのクライアントを計画している場合は、ツイストすることをお勧めします。

于 2009-11-24T21:35:39.697 に答える