Csharp/C#教程:在AcceptSocket超时?分享


在AcceptSocket超时?

是否可以在TcpListener对象上使用超时的AcceptSocket ,以便TcpListener中断一次?

 TcpListener server = new TcpListener(localIP, port); server.Start(); while (!shuttingDown) try { Socket client = server.AcceptSocket(); if (client != null) { // do client stuff } } catch { } 

尝试BeginAccept和EndAccept:如果3秒内没有客户端,我如何结束接受? (我试图在这里近似解决方案)

 server.BeginAcceptTcpClient(new AsyncCallback(DoAcceptTcpClientCallback), server); Thread.Sleep(3000); server.EndAcceptTcpClient(???); 

我创建了以下扩展方法作为TcpListener.AcceptSocket的重载,它接受超时参数。

  ///  /// Accepts a pending connection request. ///  ///  ///  ///  ///  ///  ///  public static Socket AcceptSocket(this TcpListener tcpListener, TimeSpan timeout, int pollInterval=10) { var stopWatch = new Stopwatch(); stopWatch.Start(); while (stopWatch.Elapsed < timeout) { if (tcpListener.Pending()) return tcpListener.AcceptSocket(); Thread.Sleep(pollInterval); } throw new TimeoutException(); } 

此代码检查是否有新客户端建立连接。 如果是这样,则调用AcceptSocket() 。 唯一的问题是服务器必须经常检查以快速响应客户端。

 TcpListener server = new TcpListener(localIP, port); server.Start(); while (!shuttingDown) { if (server.Pending()) { Socket client = server.AcceptSocket(); if (client != null) { // do client stuff } } else Thread.Sleep(1000); } 

只需在侦听套接字上设置接收超时。 这导致accept()以与读取超时发生相同的方式超时,无论C#中是什么。

上述就是C#学习教程:在AcceptSocket超时?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注---计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/951617.html

(0)
上一篇 2021年11月18日
下一篇 2021年11月18日

精彩推荐