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이 원격 머신으로 플러시하기 위해 대기중인 데이터를 저장한다고 가정 해 봅시다. 그 후 스트림과 소켓이 닫힙니다.자바 TCP 재전송 타임 아웃
우리는 전송 프로세스에서 네트워크에서 알 수없는 문제가 발생한다고 가정하고 운영 체제는 TCP 재전송 제한 시간까지 버퍼에 있던 패킷을 다시 보내 게됩니다.
Java 프로그램에서이 예외를 잡을 수있는 방법이 궁금합니다. 위의 코드는 이미 데이터를 버퍼로 보내고 아마 스트림과 소켓을 닫았을 것이고 (아마도 Java 메인 바디를 종료 할 것이기 때문에) 다른 모든 작업 (TCP 관련, 재전송)을 운영 체제에 남겨 두었습니다.
제 질문은 TCP 재전송 (패킷 손실이 있다고 가정)이 Java 프로그램 종료를 계속할 것입니까? 재전송 타임 아웃 오류를 잡는 가장 좋은 방법은 무엇입니까?
'Java TCP retransmission timeout'또는 실제로 'Java TCP'는 없습니다. * 플랫폼의 * TCP 스택과 그 동작이 있습니다. – EJP
안녕하세요 @EJP, TCP 송신 버퍼가 가득 차면 dOut.write가 차단된다는 것을 알고 있습니다. 버퍼가 꽉 차서 dOut.write가 막히고 네트워크가 데이터 전송에 문제가있어 TCP가 데이터를 계속 전송한다고 가정합시다. 이 경우 TCP가 최대 재전송 시간을 초과 한 후에 dOut.write throw 예외가 발생합니까? 도와 주셔서 감사합니다. – GMsoF