gpt4 book ai didi

c# - 对多个连接使用 Socket.BeginAccept/EndAccept

转载 作者:太空狗 更新时间:2023-10-30 01:22:31 28 4
gpt4 key购买 nike

与同步Accept 不同,BeginAccept 不为新创建的连接提供套接字。 EndAccept 确实如此,但它也会阻止 future 的连接被接受;所以我编写了以下代码以允许多个“客户端”连接到我的服务器:

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”,因为它本质上是递归地循环异步调用。
多次调用异步方法可能会产生开销,例如创建多个线程?

最佳答案

这样做的方式对于使用异步套接字是正确的。就个人而言,我会在您从 AsyncState 获取套接字后立即将您的 BeginAccept 移动到。这将允许您立即接受其他连接。现在,处理代码将在您准备好接受另一个连接之前运行。

正如 Usr 提到的,我相信您可以重新编写代码以将 await 用于任务。

关于c# - 对多个连接使用 Socket.BeginAccept/EndAccept,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13350812/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com