TcpClient TimeOuts与NetworkStream TimeOuts

pau*_*ons 4 c# timeout networkstream tcpclient

在以下通用场景中:

System.Net.Sockets.TcpClient TC = SomeHowObtained;
System.Net.Sockets.NetworkStream NS = TC.GetStream();
Run Code Online (Sandbox Code Playgroud)

据我所知,有3次超时:

NS.ReadTimeout // 1
TC.SendTimeout // 2
TC.ReceiveTimeout // 3
NS.WriteTimeout // 4
Run Code Online (Sandbox Code Playgroud)

在行为意义上是(1)=(3)和(2)=(4)?文档没有给出提示.

dar*_*key 7

对,就是那样 !

如果你看一下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
Run Code Online (Sandbox Code Playgroud)