与 synchronous 不同Accept
,BeginAccept
不为新创建的连接提供套接字。EndAccept
然而确实如此,但它也会阻止未来的连接被接受;所以我编写了以下代码以允许多个“客户端”连接到我的服务器:
serverSocket.BeginAccept(AcceptCallback, serverSocket);
AcceptCallback
代码:
void AcceptCallback(IAsyncResult result)
{
Socket server = (Socket)result.AsyncState;
Socket client = server.EndAccept(result);
// client socket logic...
server.BeginAccept(AcceptCallback, server); // <- continue accepting connections
}
有一个更好的方法吗?它似乎有点“hacky”,因为它本质上是递归地循环异步调用。
也许对异步方法进行多次调用会产生开销,例如创建多个线程?