1

C# で小さなオンライン ゲームを開発しています。現在、単純な同期 TCP ソケットを使用しています。しかし今(これはある種の「学習プロジェクト」であるため)、非同期ソケットに変換したいと考えています。クライアントには、次のメソッドがありますbyte[] SendAndReceive(Opcode op, byte[] data)。しかし、非同期ソケットを使用すると、これはもう不可能です。たとえば、私のMapManagerクラスは最初にマップがフォルダー内にローカルにあるかどうか (チェックサム) をチェックし、そうでない場合はサーバーからマップをダウンロードします。

だから私の質問: 受信したデータをある種のバッファに保存し、このバッファが null になるまでポーリングせずに、データを送信して答えを得る良い方法はありますか?

4

2 に答える 2

2

IO完了ポートとそれに付随するSocketAsyncEventArgsを確認してください。データが転送されたときにイベントが発生しますが、それでもバッファが必要です。ポーリングはありません。それは速くてかなり効率的です。

http://www.codeproject.com/Articles/83102/C-SocketAsyncEventArgs-High-Performance-Socket-Cod

およびMSDNの別の例

http://msdn.microsoft.com/en-us/library/system.net.sockets.socketasynceventargs.aspx

于 2012-10-01T18:48:17.627 に答える
0

あなたが持っているもののコード例が役立ちますが、スレッドマネージャーとのソケット接続ごとに新しいスレッドを使用することをお勧めします。それが理にかなっている場合、またはそれがここに該当する場合は、Lmk. :)

于 2012-10-01T18:46:04.220 に答える