Java 소켓 API: 닫힌 연결 식별
Java 소켓 API를 사용하면 원격 연결 상태를 확인하는 것이 어려울 수 있습니다. 소켓의 로컬 상태만 반영하는 isConnected() 및 isClosed()와 달리 원격 당사자에 의해 연결이 끊어졌는지 확인하는 것은 간단하지 않습니다.
연결 상태를 정확하게 확인하려면 소켓과 적극적으로 상호 작용해야 합니다. 다음은 몇 가지 접근 방식입니다.
-
데이터 교환: 출력 스트림에 데이터를 쓰려고 시도하고 발생한 예외를 캡처하면 연결이 닫혀 있음을 나타낼 수 있습니다. 그러나 이 접근 방식은 불필요한 트래픽을 지속적으로 전송하므로 이상적이지 않습니다.
-
입/출력 차단: 연결이 순서대로 닫히면 readLine() 또는 read()와 같은 작업을 차단합니다. 예측 가능한 값(-1 또는 null)을 반환합니다. 안타깝게도 연결이 갑자기 끊어지면 이 방법이 적절하지 않을 수 있습니다.
-
읽기 시간 초과: 읽기 시간 초과를 구성하면 비활성 연결을 감지하는 데 도움이 될 수 있습니다. 데이터를 수신하기 전에 시간 초과가 만료되면 연결이 끊어질 가능성이 높습니다.
-
잘못된 SelectionKeys: Java 7 이상에서 OP_READ와 함께 select()를 사용하면 연결된 SelectionKey가 다음과 같을 때 닫힌 연결을 감지할 수 있습니다. 유효하지 않은. 그러나 이 동작은 플랫폼과 JRE 버전에 따라 다를 수 있습니다.
이러한 방법은 원격 피어가 적절한 연결 종료 에티켓을 따르는 경우에만 닫힌 연결을 즉시 감지한다는 점을 기억하세요. 그렇지 않으면 연결이 반쯤 닫힌 상태가 되어 감지가 더 어려워질 수 있습니다.
위 내용은 Java Socket API를 사용하여 닫힌 원격 연결을 안정적으로 감지하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!