我有一個服務器/客戶端應用程序。網絡套接字上的C#BinaryReader.ReadString
通信時都使用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(),然後無限循環被打破,因爲連接屬性更改爲'假'。
相關的問題,一個EndOfStreamException總是指示一個斷開的網絡連接,或者它可能意味着一個臨時問題?
我知道,我發現令人費解的是,讀取失敗並不會改變Connected屬性。我可能無法閱讀百萬次,而Connected仍然是「真實的」。根據MSDN,讀取或寫入不成功將會更改Connected屬性,但在我的示例中,讀取失敗時看起來是不真實的。 – user983110
看起來好像BinaryRead()一遍又一遍地讀取相同的數據而不敲擊套接字。但是這樣會與BinaryRead()MSDN文檔發生衝突,這似乎表明,讀取數據失敗後永遠不會返回到流中。 – user983110
沒關係,我現在得到它:) – user983110