IT일기장

[JAVA] 종료된 소켓과 연결된 소켓(Client) 본문

JAVA/네트워크 프로그래밍

[JAVA] 종료된 소켓과 연결된 소켓(Client)

새내기 웹개발자. 姫鐘 2016.09.14 11:26

isClosed() 메소드는 소켓이 닫혀있는 경우 true, 아닌 경우 false를 반환한다.


소켓의 상태가 불확실한 경우 IOException이 발생할 위험을 감수하는 것 보다 이 메소드를 사용하는 것이 좋다.


if(socket.inClosed() {

//소켓이 닫혀 있는 경우 처리...

} else {

//소켓이 열려 있는 경우 처리...

}


그러나 이 방법도 완벽하지는 않다. 만약 소켓이 최초에 연결된 적이 없는 경우 소켓은 확실히 열려 있지는 않지만 isClosed()메소드는 false를 반환한다.


Socket 클래스는 isConnected() 메소드도 제공한다. 메소드의 이름만 보고는 소켓이 현재 연결되어 있는지 알려주는 것 같지만, 이 메소드는 소켓이 원격 호스트에 연결된 적이 있는지 여부를 알려준다. 소켓의 최근 연결 요청이 성공했다면 닫힌 후에도 ture를 반환한다.


소켓이 현재 열려있는지를 확인하기 위해서는 isConnected() 반환값이 true이고 isClosed() 반환값이 false인 두 조건을 모두 확인해야 한다.


boolean connected = socket.isConnected() && ! socket.isClosed();


마지막으로, is.Bound() 메소드는 소켓이 로컬 시스템의 나가는 포트에 성공적으로 바인딩 되었는지 여부를 알려준다.


isConnected() 메소드는 소켓의 원격 끝 부분을 참조하는 반면, isBound() 메소드는 소켓의 로컬 시스템의 끝 부분을 참조한다.


toString() 메소드


Socket 클래스는 java.lang.Object의 표준 메소드에서 유일하게 toString() 메소드 만을 오버라이드한다.


Socket 클래스의 toString() 메소드는 다음과 같은 문자열을 생성한다.


Socket[addr = www.naver.com/125.209.222.141,port=80,localport=7320]


이 정보는 주로 디버깅에 유용하게 사용된다. 이 문자열의 형식은 언제든 변경될 수 있으며, 이 형식에 의존적인 코드를 작성해서는 안된다.


이 문자열의 모든 부분은 get 메소드를 사용하여 직접 접근할 수 있다.

[getInetAddress(), getPort(), getLocalPort()]

0 Comments
댓글쓰기 폼