我有一个服务器/客户端应用程序。
两者在通信时都使用 BinaryReader/Writer。
当客户端和服务器快速交换消息时,很多是在一秒钟内,我关闭服务器(通过内置命令,有序关闭)大部分时间(但不总是)客户端的 BinaryReader.ReadString() 方法抛出一个EndOfStreamException,这很好。我不明白的是为什么这个异常不将 TcpClient.Connected 属性更改为“false”?
while(true){
try{
BinaryReader.ReadString()
}
catch(IOException){
if(!TcpClient.Connected)
break;
//BinaryWriter.Write() - this will, eventually, change Connected property to 'false'
}
}
这将无限循环。我认为 Connected 属性会在网络读/写不成功时发生变化。如果 BinaryReader 抛出异常,那么它没有成功读取,是吗?
如果我输入 BinaryWriter.Write(),则无限循环将被打破,因为 Connected 属性更改为“false”。
相关问题,EndOfStreamException 是否总是表示网络连接中断,或者是否意味着临时问题?