1
當從NetworkStream
接收數據時,我可以配置stream.ReadTimeout
。
當在配置的時間內沒有收到任何數據時,我得到一個SocketException
和ex.SocketErrorCode=SocketError.TimedOut
。由於超時而導致異常後可以繼續使用NetworkStream嗎?
我可以在這個異常之後繼續使用流,還是有可能以這種方式丟失一些字節?
示例代碼:
using (TcpClient client = new TcpClient("127.0.0.1", 2000))
using (NetworkStream stream = client.GetStream())
using (StreamReader reader = new StreamReader(stream, Encoding.ASCII))
{
stream.ReadTimeout = 5000;
while (true)
{
int i;
try
{
i = reader.Read();
}
catch (IOException ex)
{
SocketError socketError = SocketError.Success;
if (ex.InnerException is SocketException)
socketError = ((SocketException)ex.InnerException).SocketErrorCode;
if (socketError == SocketError.TimedOut)
{
Console.WriteLine("no data received for 5 seconds");
continue;
}
else throw;
}
}
}
[Click](https://stackoverflow.com/a/3575154/1997232)。 – Sinatr
@Sinatr我不認爲你連接的答案是正確的。在我的測試中,TcpClient根本不會斷開,它工作得很好。我只是不知道這種方法是否安全,或者字節是否可能會丟失。 – HugoRune