我有一台服务器,它接收来自客户端的连接请求。该服务器使用异步Socket.BeginReceiveSocket.EndReceive方法。该代码与here找到的代码非常相似。

就我而言,在调用Socket.BeginReceive之后,我需要超时,以便如果客户端挂接到连接但在固定的时间内完全不传输任何数据,则需要终止连接。

  • 我该如何终止
    在这种情况下连接?
  • 编码的最佳方法是什么
    计时器?
  • 最佳答案

    只需调用套接字的Close()方法即可。此后,回调方法将很快运行,调用ObjectDisposedException方法时,您将获得EndReceive()。准备捕捉该异常。

    您可能不想阻止名为BeginReceive的线程,需要使用System.Threading.TimerSystem.Timers.Timer来检测超时。其回调应调用Close()。当心这种不可避免的竞争条件,如果在计时器到期前一微秒内收到响应,则计时器的回调将运行。即使您获得了良好的响应,您仍将关闭套接字。下一次对BeginReceive()的调用将立即失败。

    关于C#:如何在Socket.BeginReceive回叫之前终止套接字?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1921611/

    10-10 01:07