在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