我有一个多线程C#程序,其中每个线程使用TcpClient同步接收来自多个服务器的面向文本/行的数据。使用TcpClient ReceiveTimeout与同步程序
它已经运行了2年没有错误,但是当提供服务器的供应商发生变化时,我们开始发现供应商服务器程序缓冲区溢出并且它们的修复(显然)阻止它们进行核心转储的问题,但他们也停止发送给我们。但是它们不会拆除TCP连接,所以双方都将其显示为ESTABLISHED。
供应商告诉我们,如果在可配置的超时后没有收到数据,另一个客户只需实施超时并重新建立连接,就可以解决此问题。因为我使用同步模型(本质上,'while readline()')实现了我的线程,我可以使用TcpClient ReceiveTimeout属性并期望它能正常工作吗?我尝试了一个更简单的非线程版本,它似乎可以在第一个循环中工作,但不会在之后。
我真的不想重写程序来使用异步套接字模型。
有关使用同步TcpClient超时的简单方法的任何建议将不胜感激。
米奇
附录:当我收到的的ReadLine()例外,我不关闭的TcpClient,并开始了,就像我收到了网络断开。通过“不工作”,我的意思是在几次后停止超时,即使1)我仍然没有被发送任何东西,2)我坐在一个ReadLine()中被阻塞。
请详细说明“这似乎是第一个循环,但不是事后”。请注意,一旦在套接字上发生故障(包括超时),您必须关闭它并重新开始。 – 2014-10-20 17:34:08