0

我得到了一个代码,该代码还涉及我刚开始的异步套接字。我不知道为什么作为 BeginAccept 套接字的第二个参数的对象状态为空,老实说,我没有从 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

第二个附加参数是用户定义的对象。此对象可用于将特定于应用程序的状态信息传递给异步操作完成时调用的方法。

于 2012-09-19T18:20:14.837 回答