在下面的通用场景中:
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) 是行为意义上的吗?文档没有给出提示。
是的,就是这样!
如果您查看 NetworkStream 类中 ReadTimeout 和 WriteTimeout 属性的实现,您会发现它们只是套接字接收超时和发送超时属性的包装器(TcpClient ReceiveTimeout 和 SendTimeout 属性是同名套接字属性的包装器)。
这意味着最终您无论如何都会通过 NS 和 TC 对象获取或设置 Socket 的 ReceiveTimeout 和 SendTimeout 属性。
简而言之:
NS.ReadTimeout == TC.ReceiveTimeout == Socket.ReceiveTimeout
MS.WriteTimeout == TC.SendTimeout == Socket.SendTimeout