gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 02:51:56 32 4
gpt4 key购买 nike

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

它已经运行 2 年没有错误,但是当提供服务器的供应商发生变化时,我们开始看到供应商服务器程序出现缓冲区溢出的问题,并且他们的修复(显然)阻止了核心转储,但也他们停止发送给我们。但是他们并没有断开 TCP 连接,所以双方都显示为 ESTABLISHED。

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

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

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

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

米奇

附录:当我在 ReadLine() 上收到异常时,我会关闭 TcpClient 并重新开始,就像收到网络断开连接一样。 “不工作”是指它在几次后停止超时,即使 1.) 我仍然没有收到任何东西和 2.) 我被阻塞在 ReadLine() 中。

最佳答案

ReceiveTimeout 适用于同步 IO。 There is no timeout for async socket reads.如果 ReceiveTimeout 对您不起作用,则问题中给出的信息中存在一些不明显的错误。在这种情况下,发布重现代码。

关于c# - 将 TcpClient ReceiveTimeout 与同步程序一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26471412/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com