将TcpClient ReceiveTimeout与同步程序一起使用

本文关键字:一起 程序 同步 TcpClient ReceiveTimeout | 更新日期: 2023-09-27 18:27:22

我有一个多线程C#程序,其中每个线程使用TcpClient从多个服务器同步接收面向文本/行的数据。

它已经运行了两年没有错误,但当提供服务器的供应商更换时,我们开始看到供应商服务器程序缓冲区溢出的问题,他们的修复(显然)阻止了他们转储核心,但他们也停止了向我们发送。但他们没有断开TCP连接,所以双方都将其显示为已建立。

供应商告诉我们,另一位客户通过简单地实现超时来解决这个问题,如果在可配置的超时后没有收到数据,则重新建立连接。

由于我使用同步模型(本质上是"while readline()")实现了线程,我可以使用TcpClient ReceiveTimeout属性并期望它正常工作吗?我用一个更简单的无线程版本尝试了它,它似乎在第一个循环中起作用,但之后就不行了。

我真的不想为了使用异步套接字模型而重写程序。

任何关于使用同步TcpClient超时的简单方法的建议都将不胜感激。

Mitch

附录:当我在ReadLine()上收到异常时,我确实关闭了TcpClient并重新启动,就像我收到了网络断开一样。我所说的"不工作"是指它在几次后停止计时,尽管1.)我仍然没有收到任何消息,2.)我坐在ReadLine()中被阻止。

将TcpClient ReceiveTimeout与同步程序一起使用

ReceiveTimeout仅适用于同步IO。异步套接字读取没有超时。如果ReceiveTimeout不适用于您,那么从问题中提供的信息中会发现一些不明显的错误。在这种情况下,发布repro代码。

相关文章: