C#で 'SocketAsyncEventArgs'クラスを理解しようとしています。 http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspxC#SocketAsyncEventArgsがデータの送受信を処理する
私はこのチュートリアルを次のです:http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod
は今、私はまさに私のサーバーを使用してデータを処理する方法にこだわっています。私がやろうとしているのは、BufferManagerで512バイトの割り当てられたバッファスペースを持つ接続されたクライアントにSocketAsyncEventArgsを使用することです。次に、バイト[]データをデコードして読み込むためのバイト[]を保持する独自のカスタムクラス(ClientPacket)にデコードすることです。
これはすべてが順調であるが、常にデータとの質問に応答しない私のサーバーは、次のとおりです。
は、私の周り、プールたびからSocketAsyncEventArgsを割り当て、データを受信処理する受信し、ループの1つのSocketAsyncEventArgsを使用しています私はそれを完了して返す必要がありますか?読み込みが完了したら、SocketAsyncEventArgsはどのように知っていますか? (新しいデータで上書きする前にbyte []バッファで終了したとき)返信しないと完了したらプールにどのように返されるのでしょうか?
あなたはそれを新しいbyte []に設定すると言っていますが、すべてのSocketAsyncEventArgsに大きなバッファブロックを共有しています。そのバッファブロックをパケットで読み取ると、バッファブロックは次の着信によって上書きされますdata、たとえbyte []配列をコピーしても、Buffer Blockを使ってデータを送受信することはできませんか?また、受信操作がいつでも発生する可能性がある場合、同じオブジェクトでデータを送信するにはどうすればよいですか? –
あなたは2台のマシン間で1つのソケット接続を想定しているようです。多くの同時接続を処理するときは、SocketAsyncEventArgsを1つだけ再利用することはできません。 (これはSocketAsyncEventArgsのために構築されたものです)。 –
SonOfPirateに感謝します。大量のデータを受け取ったらもっと詳しく説明できます。終わりに達する前にReceiveAsyncを再呼び出しする必要がある場合は特に明記してください。またはフレームワークは私のためにそれを行いますか? –