ServerSocket 정보 - 로컬 호스트가 하나 이상의 IP 주소를 가지고 있는 경우, 어떤 주소가 반환될지 예측할 수 없는 경우, 서버 소켓이 네트워크 인터페이스에 아직 연결되지 않은 경우, 서버 소켓..

CODEDRAGON Development/Java

반응형

 

 

ServerSocket 정보

서버 소켓에 의해 사용 중인 로컬 주소(getInetAddress)와 포트(getLocalPort)를 알려주는 두 가지 get 메서드 제공하는데 이 두 메소드는 네트워크 인터페이스를 명시하지 않았거나 익명 포트를 사용하여 서버 소켓을 생성한 경우 유용하게 사용됩니다.

 

 

로컬 호스트가 하나 이상의 IP 주소를 가지고 있는 경우

호스트의 IP 주소 중 하나가 반환됩니다.

 

 

어떤 주소가 반환될지 예측할 수 없는 경우

InetAddress 클래스를 이용하면 도메인 주소와 IP주소를 알아낼 수 있는데 ServerSocket getInetAddress()메소드를 이용하면 IP주소를 확인 할 수 있습니다.

ServerSocket httpd = new ServerSocket(80);

InetAddress ia = httpd.getInetAddress();

 

 

서버 소켓이 네트워크 인터페이스에 아직 연결되지 않은 경우

getInetAddress()메소드는 null을 반환합니다.

 

 

서버 소켓 생성자의 포트 번호로 0번을 전달한 경우

서버 소켓 생성자의 포트 번호로 0번을 전달하면 익명의 포트 번호로 대기하게 되고 이 메소드를 사용하면 실제 대기 중인 포트 번호를 확인 할 수 있습니다.

 

ServerSocket 메서드는 여러분의 위치를 다른 동료에게 알기 위한 수단으로 P2P멀티 소켓 프로그램에서 사용하거나, 서버가 특정 연산을 수행하기 위한 몇몇 하위 서버들을 실행한 경우 상위 서버가 클라이언트에게 몇 번 포트를 통해 하위 서버들을 찾을 수 있는지 알려주는 경우에 사용가능합니다.

아래는 getLocalPort()메소드를 사용하여 연결된 소켓이 사용하는 포트를 넘겨주는 코드입니다.

try{

ServerSocket server = new ServerSocket(0);

System.out.println("This server runs on port " + server.getLocalPort());

} catch (IOException ex) {

System.err.println(ex);

}

 

 

getLocalPort()

서버의 포트를 알 수 있는 메서드입니다.

public int getLocalPort();

 

 

 

setSoTimeout(int timeout)

accept() 메서드의 시간을 설정할 수 있는 메서드입니다.

public void setSoTimeout(int timeout) throws SocketException;

 

 

 

getSoTimeout()

accept() 메서드의 시간을 알 수 있는 메서드입니다.

0이 반환되면 accept() 메서드의 유효시간은 무한대를 의미합니다.

public int getSoTimeout() throws IOException;