자바 소켓에서 루프를 읽는 중입니다.Java 소켓을 다시 여는 방법
읽기가 예외를 throw하면 소켓을 다시 열려고합니다.
이를 테스트하기 위해 간단히 소켓을 닫고 예외를 잡습니다. 예외를 throw
serverSocket = new ServerSocket(port)
socket = serverSocket.accept()
: 테스트를위한 즉각적인 문제입니다
java.net.BindException: The socket name is already in use
내가 소켓을 다시 열려고하면
캐치이다. 그러나 생산에서도 발생할 수 있습니다.
예외가 발생한 후 어떻게 새 소켓 연결을 열어 안정적으로 복구 할 수 있습니까?
스레드가 예외를 throw하면 serversocket을 닫은 다음 (10) 동일한 포트를 다시 열려면 10 초 동안 기다려야합니다. – akarnokd
어떤 이유로 서버가 소켓을 닫고 클라이언트가 isClosed()를 감지하면 서버를 다시 열 수는 없지만 클라이언트는 새 소켓을 만들어야합니다. 10 초는 임의로 보입니다. 지수 백 오프 재시도 패턴이 더 적절할 것입니다. –