0

私は、私が始めた非同期ソケットも含むコードを与えられました。BeginAcceptソケットの2番目のパラメーターとしてのオブジェクトの状態がnullである理由がわかりません。正直なところ、MSDNからこのパラメーターを使用できませんでした。また、BeginAcceptがコールバックメソッドから再度呼び出されるのはなぜですか?

public void Start()
        {

                this.mTcpListener.Start();
                this.mTcpListener.BeginAcceptSocket(this.AcceptClient, null);
        }

 protected void AcceptClient(IAsyncResult ar)
        {
            if (this.mTcpListener != null)
            {
                System.Net.Sockets.Socket s = this.mTcpListener.EndAcceptSocket(ar);
                Client c = new Client(this, s, this.GetFreePlayerID());

                ..some code for adding the client instance to collection....                  
                this.mTcpListener.BeginAcceptSocket(this.AcceptClient, null);
            }
        }
4

2 に答える 2

1

fsimonazziに続いて、このコードは多くの着信接続を保持することを目的としたサーバーの一部であると思います。

BeginAcceptは、ソケットで受け入れプロセスを開始するために使用されます。

次に、AcceptClientで、EndAcceptSocketを使用してAcceptConnection非同期プロセスを終了します。

この時点で、プログラムは新しい接続/ソケットをリッスンしなくなります。これを行うために、非同期のBeginAcceptSocketプロセスを再度開始します。

于 2012-09-19T22:37:40.863 に答える
0

そのパラメーターは、呼び出し元のコードによって純粋に使用されます。コールバックにペースを戻し、コールを識別するために使用できます。nullの使用は完全に有効です。

非同期プログラミングモデルの詳細については、http://msdn.microsoft.com/en-us/library/ms228963.aspxを参照してください。

2番目の追加パラメーターは、ユーザー定義オブジェクトです。このオブジェクトを使用して、非同期操作の完了時に呼び出されるメソッドにアプリケーション固有の状態情報を渡すことができます。

于 2012-09-19T18:20:14.837 に答える