연결 끊김 시 빠른 실패를 방지하도록 Java 소켓을 구성하시겠습니까?

StackOverflow https://stackoverflow.com/questions/22720

문제

내 서버에는 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이 발생합니다.그러나 버퍼링으로 인해 연결이 끊어진 후 첫 번째 쓰기에서는 발생하지 않고 후속 쓰기에서는 발생합니다.이에 대해 당신은 아무것도 할 수 없습니다.

소켓에서 읽기 위해 다른 스레드를 설정하십시오.소켓이 닫힐 때까지 차단된 다음 예외가 발생합니다.닫기를 즉시 감지하려면 해당 예외를 잡아야 합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top