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 продолжает пересылать данные. В этом случае исключение dOut.write throw после TCP превысит максимальное время повторной передачи? Спасибо за помощь. – GMsoF