質問

C#/。net 3.5でネットワーキングを行う方法を学ぶための正しい方向を誰かに教えていただけますか?コードのサンプルと説明は大歓迎です。基本的に、非同期/マルチスレッドサーバー/クライアントモデルの実行方法を探しています。

WinSockを使用してC ++でこれを実現する方法の基本にはかなり慣れていますが、C#でこの概念を把握することはできないようです。

ご提供いただけるサポートに感謝します:)

役に立ちましたか?

解決

WCFがニーズを満たしている場合は、検討する価値があります。 ZeroC およびその他の代替の高レベルライブラリが存在します。それ以外の場合は、必要に応じてソケットレベルに近い方法で作業する方法がいくつかあります。

TcpClient / UdpClient

これらは、基礎となるソケットの周りに比較的薄いラッパーを提供します。基本的に、ソケットを介したストリームを提供します。 NetworkStreamで非同期メソッド(BeginReadなど)を使用できます。ラッパーはそれほど多くは提供せず、ソケットを直接使用するよりも少し厄介になる傾向があるため、私はこれが好きではありません。

ソケット-選択

これは、複数のソケットIOを単一スレッドに多重化するための従来のSelect手法を提供します。推奨されなくなりました。

ソケット-APMスタイル

ソケットの非同期プログラミングモデル(別名IAsyncResult、開始/終了スタイル)は、ソケットを非同期で使用するための主要な手法です。また、いくつかのバリエーションがあります。基本的に、非同期メソッド(BeginReceiveなど)を呼び出して、次のいずれかを実行します。

  1. 返されたIAsyncResultの完了のポーリング(ほとんど使用されません)。
  2. IAsyncResultのWaitHandleを使用して、メソッドが完了するまで待機します。
  3. BeginXXXメソッドに、メソッドの完了時に実行されるコールバックメソッドを渡します。

それが通常最も便利であるため、最良の方法は#3です。疑問がある場合は、この方法を使用してください。

一部のリンク:

.NET 3.5高性能ソケット

.NET 3.5では、イベントを使用する非同期ソケットの新しいモデルが導入されました。 " simplified"を使用します。非同期モデル(Socket.SendAsyncなど)。コールバックを与える代わりに、完了のためにイベントにサブスクライブし、IAsyncResultの代わりにSocketAsyncEventArgsを取得します。その考えは、SocketAsyncEventArgsを再利用し、ソケットIOにメモリを事前に割り当てることができるということです。高パフォーマンスのシナリオでは、APMスタイルを使用するよりもはるかに効率的です。さらに、メモリを事前に割り当てると、安定したメモリフットプリント、ガベージコレクションの削減、ピン止めによるメモリホールなどが発生します。これを心配することは、最もパフォーマンスの高いシナリオでのみ考慮する必要があることに注意してください。

概要

SocketAsyncEventArgs / Asyncメソッドのスタイルを好まない限り、ほとんどの場合、APMスタイルのコールバックメソッドを使用します。 WinSockでCompletionPortsを使用したことがある場合、これらのメソッドの両方が内部でCompletionPortsを使用することを知っておく必要があります。

他のヒント

.NET 3.5の世界では、 Windows Communication Foundation -ネットワーク用の.NETフレームワーク。

便利なリンク:

同期操作と非同期操作(WCFで)

StackOverflowブラウジング投稿で有用なWCF情報を見つけることができます WCFでタグ付けタグ

何に焦点を合わせたいかによります。

機能に焦点を合わせ、フレームワークに任せる場合は、Windows Communication Foundationから始めます。

独自の配管を構築する場合は、 System.Net.Sockets.Socket クラスを使用します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top