TcpClient TimeOuts与NetworkStream TimeOuts

时间:2012-12-13 22:14:11

标签: c# timeout tcpclient networkstream

在以下通用场景中:

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)?文档没有给出提示。

1 个答案:

答案 0 :(得分:5)

是的就是它!

如果你看一下NetworkStream类中ReadTimeout和WriteTimeout属性的实现,你会发现它们只是封装了Socket ReceiveTimeout和SendTimeout属性(并且TcpClient ReceiveTimeout和SendTimeout属性是包装器的Socket属性。同名)。

这意味着最终你要通过NS和TC对象获取或设置Socket的ReceiveTimeout和SendTimeout属性,无论如何。

简而言之:

NS.ReadTimeout == TC.ReceiveTimeout == Socket.ReceiveTimeout
MS.WriteTimeout == TC.SendTimeout == Socket.SendTimeout