0

次の問題について、いくつかの指針が必要です (実例は素晴らしいでしょう)。私はソケットプログラミングに不慣れですが、.net には慣れていませんが、VB や C# にヘルプがあるかどうかは気にしません。

私は「クライアント」システムを持っています。これは、数秒(10秒としましょう)ごとに定期的なデータのチャンク(実際にはASCII)を吐き出します。データはおそらく 1K 未満の小さなサイズになり、各出力を特定のシーケンス (たとえば<EoM>) で区切ることができます。この「クライアント」は、複数 (1 つ以上、5 つ未満) の異なるポートに出力します。

必要な数のポートを開き、データの到着をリッスンするサーバーを作成する必要があります。メッセージがポートの 1 つに到着し<EoM>、最後に区切り文字がある場合、そのデータを取り出して、そのデータに対して処理を実行できるようにしたいと考えています (データを解析し、DB に入力して情報を取得します)。そして、次のデータが到着するのを待ち続けます。これは、定義されたすべてのポートで発生する必要があります。クライアントが切断された場合、ポートが待機して再接続をリッスンし、以前と同じように処理を続行できるようにすることをお勧めします。ただし、通信する単一のクライアントであるため、1 つのポートが切断された場合、切断後に再度リッスンするよりも簡単であれば、サーバー プロセスを再起動しても問題ないと仮定します。

私が言ったように、長くてひどく正確ではない質問で申し訳ありませんが、ソケットプログラミングは初めてなので、これを行う方法の実際の例は大歓迎です。最終結果は理想的には Windows サービスですが、デバッグを容易にするためにすべてが機能するまで、フォーム アプリとして開始したいと考えています。

どんな助けにも乾杯。

4

2 に答える 2

1

TCPListenerは、一度に 1 つのポートだけをリッスンします。複数のポートでリッスンする場合は、その数の TCPListener インスタンスを作成する必要があります。

各ポートのリスナーに異なる操作を実行させるため、各ポートでクライアントを受け入れ、そこで受信したデータを処理する必要があります。

上記のリンクは、クライアントを受け入れてデータをリッスンする方法に関する基本的な初心者向けの例を提供します。非同期メソッドのパフォーマンスははるかに優れていますが、この同期コードはよりシンプルであり、簡単に開始できます。

于 2012-08-07T12:28:45.897 に答える
0

TAP/TUN ドライバーを使用して、独自のネットワーク インターフェイス (Windows と Linux の両方) をインストールし、生のイーサネット フレームにアクセスできるようにすることができます。これにより、フレームに対して独自のフィルタリングを実行し、関連する IP とポートを見つけて、サービスのために独自の TCP/IP ソフトウェア スタックに転送できます。

これは機能しますが、欠点があります。

  1. TAP/TUN ドライバーは 10Mbps になる傾向があります
  2. 下位レベルのパケットのユーザー モード処理は CPU を集中的に使用し、パケットが時々ドロップされる
  3. フレームを TCP プロトコルにダイジェストするために、TCP/IP ライブラリを構築または使用する必要があります。これには、TCP セッション状態の維持が含まれます。

TAP/TUN はセキュリティ スクリーニングやおそらく UDP 機能に最適ですが、TCP/IP は別のレベルです。

これは実行可能な回答ですが、@nunespascal の回答をお勧めします。非同期プログラミングはそれほど難しくありません。リスナーが 5 つまでしか話していない場合は、それで十分です。何百もの休止状態の非同期リスナーであっても、妥当なはずです。

于 2016-06-02T12:25:08.163 に答える