2013-05-07 65 views
0

我想了解斷管異常,並認爲生成一個是個好主意,但很不幸,我一直無法做到。如何在java中創建斷管IO異常

服務器 - netcat的 客戶端 - Java的插座

Server ------------- Client 
      <--------- SYN 
    SYN,ACK ---------> 
      <--------- ACK 
    FIN,ACK --------->  (when server dies on kill -9) 
      <--------- ACK 
      <--------- writes some bytes   
    RST ------------->  (no exception thrown at java side) 
  1. 爲什麼正在寫死了一個服務器進程時,破裂的管道沒有被拋出?

回答

0

管道是數據流,通常是從文件或網絡套接字讀取數據。當管道從另一端突然關閉時發生斷管。對於這種情況,這可能是文件安裝在光盤或已斷開連接的遠程網絡上。對於網絡套接字,可能是網絡拔出或另一端的進程崩潰。

嘗試讀取大文件,並在客戶端正在讀取它時,通過拔下網絡電纜或禁用網絡適配器將其從網絡中取出。

只需關閉服務器。

確保客戶端正在從服務器讀取大字節流,以便您可以手動執行上述任一步驟。

+0

如果網絡消失,那麼讀取過程中會出現讀取超時。如果進程消失,寫入過程的操作系統仍然會發送一個FIN,以便獲得EOF。我不能用你描述的場景重現破損的管道。你知道引發這個異常的確切的源代碼嗎? – Rag 2013-05-07 14:59:19