+-
c#-来自AsyncState和EndAccept()函数的.NET套接字之间的区别
阅读此 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).它的工作是成为接受连接的“公共”方式.接受连接后,它将在随机选择的端口(合理地是伪随机)上创建一个新的套接字.然后,原始的连接应用程序和主机可以通过该套接字进行通信,从而释放侦听套接字以获取另一个连接(它将为新的连接分配另一个端口号,依此类推).

建立连接后,通常需要做EndAccept.侦听器通常会继续侦听以接受更多连接.如果没有,您通常将只处置或关闭套接字以停止侦听并取消任何挂起的接受.处理程序用于完成应用程序所需的任何通信,而完全独立于侦听器套接字.处理程序套接字完成后,您将其处置或关闭,并且由于侦听器是独立的,因此它将继续“运行”.

关机将刷新面向连接的套接字上的所有未决数据(在“关闭”之前调用),并且不会影响任何其他套接字.

点击查看更多相关文章

转载注明原文:c#-来自AsyncState和EndAccept()函数的.NET套接字之间的区别 - 乐贴网