연결 끊김 시 빠른 실패를 방지하도록 Java 소켓을 구성하시겠습니까?
-
09-06-2019 - |
문제
내 서버에는 Java 클래스를 사용하여 연결하는 수신 포트가 있고 Socket
인터페이스, 즉
Socket mySocket = new Socket(host,port);
그런 다음 나는 OutputStream
, 장식하다 PrintWriter
autoflush 모드에서 나는 웃고 있습니다 - 청취 포트가 닫히는 경우를 제외하고.그러면 나는 얻는다
tcp4 0 0 *.9999 *.* LISTEN
tcp 0 0 127.0.0.1.45737 127.0.0.1.9999 CLOSE_WAIT
프로그램에서 문제를 발견할 수 없는 것 같습니다. isConnected()
메서드를 소켓에 연결했지만 연결이 닫혔는지 모르는 것 같습니다.
다음에 소켓에 쓸 때 문제를 인식하여 다시 연결하고 문제를 보고할 수 있도록 하고 싶습니다.
조언 좀 부탁드립니다.
모두 감사합니다
해결책
짧은 시간 제한을 설정하시겠습니까?
하다 isOutputShutdown()
당신이 원하는 것을 얻지 못합니까?
당신은 항상 SocketWatcher
스스로 회전하는 클래스 Thread
그리고 반복적으로 빈 문자열을 쓰려고 시도합니다. Socket
그 일이 일어날 때까지 SocketClosedException
.
다른 팁
TCP에서 끊어진 연결을 감지하는 신뢰할 수 있는 유일한 방법은 연결에 쓰는 것입니다. 그러면 결국 '연결 재설정' IOException이 발생합니다.그러나 버퍼링으로 인해 연결이 끊어진 후 첫 번째 쓰기에서는 발생하지 않고 후속 쓰기에서는 발생합니다.이에 대해 당신은 아무것도 할 수 없습니다.
소켓에서 읽기 위해 다른 스레드를 설정하십시오.소켓이 닫힐 때까지 차단된 다음 예외가 발생합니다.닫기를 즉시 감지하려면 해당 예외를 잡아야 합니다.
제휴하지 않습니다 StackOverflow