public static void main(String args[]){
byte[] message = ...
Socket socket = ...
DataOutputStream dOut = new DataOutputStream(socket.getOutputStream());
dOut.write(message); //#1
dOut.close();
socket.close();
}
我們假設第1行將數據放入緩衝區,等待刷新到遠程機器。之後,流和套接字被關閉。Java TCP重新傳輸超時
我們假設在發送過程中,網絡中發生了一些未知的問題,我們的操作系統會重新發送緩衝區中的數據包,直到TCP重新傳輸超時。
我想知道如何在Java程序中捕獲此異常?因爲上面的代碼已經將數據發送到緩衝區並可能關閉了流和套接字(可能會退出Java主體),所以將所有其他作業(TCP相關,重新傳輸)留給操作系統。
我的問題是,TCP重新傳輸(我們假設包丟失)甚至Java程序退出?捕獲重傳超時錯誤的最佳方法是什麼?
沒有'Java TCP重傳超時'或者'Java TCP'這樣的東西。只有*平臺的* TCP堆棧及其行爲。 – EJP
嗨@EJP,我知道dOut.write只會在TCP發送緩衝區已滿時被阻塞。我們假設,dOut.write因爲緩衝區已滿而被阻塞,並且網絡在發送數據時有一些問題,所以TCP繼續重新傳輸數據。在這種情況下,TCP超過最大重傳時間後,dOut.write會拋出異常嗎?感謝幫助。 – GMsoF