【问题标题】:TcpClient TimeOuts vs. NetworkStream TimeOutsTcpClient 超时与 NetworkStream 超时
【发布时间】:2012-12-01 21:49:37
【问题描述】:
在以下通用场景中:
System.Net.Sockets.TcpClient TC = SomeHowObtained;
System.Net.Sockets.NetworkStream NS = TC.GetStream();
据我所知,有 3 次超时:
NS.ReadTimeout // 1
TC.SendTimeout // 2
TC.ReceiveTimeout // 3
NS.WriteTimeout // 4
在行为的意义上,(1) = (3) 和 (2) = (4) 是吗?文档没有给出提示。
【问题讨论】:
标签:
c#
timeout
tcpclient
networkstream
【解决方案1】:
是的,就是这样!
如果你看一下 NetworkStream 类中 ReadTimeout 和 WriteTimeout 属性的实现,你会发现它们只是 Socket ReceiveTimeout 和 SendTimeout 属性的包装器(而 TcpClient ReceiveTimeout 和 SendTimeout 属性是 Socket 的 Socket 属性的包装器)同名)。
意味着你最终通过 NS 和 TC 对象获取或设置 Socket 的 ReceiveTimeout 和 SendTimeout 属性,无论如何。
简而言之:
NS.ReadTimeout == TC.ReceiveTimeout == Socket.ReceiveTimeout
MS.WriteTimeout == TC.SendTimeout == Socket.SendTimeout