gpt4 book ai didi

c# - 来自 AsyncState 和 EndAccept() 函数的 .NET 套接字之间的区别

转载 作者:行者123 更新时间:2023-11-30 15:37:56 25 4
gpt4 key购买 nike

通读这篇文章时Async Sockets example ,我找到这段代码:

    // Get the socket that handles the client request.
Socket listener = (Socket) ar.AsyncState;
Socket handler = listener.EndAccept(ar);

我找不到关于这两个套接字之间区别的文档,我还想知道关闭处理程序或关闭处理程序将如何影响原始套接字。任何人都可以对此进行解释,或向我指出一些文档吗?

最佳答案

套接字是特定机器上的唯一连接,即 127.0.0.1:1024。一次只能建立一个事件连接。 “监听器”监听固定端口(例如我上面示例中的 1024)。它的工作是成为接受连接的“公共(public)”方式。一旦它接受一个连接,它就会在一个新的、随机的(好吧,相当伪随机的)选择端口上创建一个新的套接字。然后原始连接应用程序和主机可以通过该套接字进行通信,从而释放监听套接字以获得另一个连接(这将为新连接分配另一个端口号,依此类推)。

EndAccept 通常是您建立连接后需要做的所有事情。 listener 通常会继续监听更多要接受的连接。如果没有,您通常只需处理或关闭套接字即可停止监听并取消任何待处理的接受。 handler 用于执行您的应用程序需要的任何通信,完全独立于 listener 套接字。当您处理完 handler 套接字后,您可以释放或关闭它,因为 listener 是独立的,它会继续“运行”。

Shutdown 将刷新面向连接的套接字(在 Close 之前调用)上的所有未决数据,并且不会影响任何其他套接字。

关于c# - 来自 AsyncState 和 EndAccept() 函数的 .NET 套接字之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12013301/

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