본문 바로가기

JAVA/네트워크 프로그래밍

[JAVA] 소켓 정보 얻기(Client)

소켓 객체는 get 메소드를 사용하여 접근할 수 있는 몇 가지 속성을 제공한다.


◎ 원격 주소

◎ 원격 포트

◎ 로컬 주소

◎ 로컬 포트


이 속성에 접근하기 위한 get메소드는


public InetAddress getInetAddress()

public int getPort()

public InetAddress getLocalAddress()

public intgetLocalPort()


set 메소드는 존재하지 않는다. 이 속성들은 소켓이 연결되자마자 설정되며 고정되어 있다.


getInetAddress() 그리고 getPort() 메소드는 소켓이 연결된 원격 호스트와 포트를 알려준다. 또는 연결이 종료된 경우 연결된 당시의 호스트와 포트를 알려준다.


getLocalAddress()와 getLocalPost() 메소드는 연결이 시작된 네트워크 인터페이스와 포트를 알려준다.



'잘 알려진 포트(Well-known port)'[0~1023번]를 사용하는 원격 포트와 달리, 로컬 포트는 일반적으로 실행 시점에 이용 가능한 포트 중에서 시스템에 의해 결정된다.


이러한 구조로 인해 단일 시스템에서 실행중인 많은 클라이언트가 동시에 같은 서비스에 접근하는 것이 가능해진다. 로컬포트는 로컬 호스트의 IP주소와 함께 밖으로 나가는 IP패킷에 박혀 있다. 그래서 서버가 클라이언트의 올바른 포트로 응답을 보낼 수 있다.


아래 예제는 명령 라인을 통해 호스트네임 목록을 읽고, 각각의 호스트에 대해 소켓을 열려고 한다. 그러고 나서 원격 호스트, 원격 포트, 로컬 주소, 로컬 포트를 출력하기 위해서 이 네 개의 메소드를 사용한다.


package network;


import java.io.IOException;

import java.net.Socket;

import java.net.SocketException;

import java.net.UnknownHostException;


public class T86SocketInfo {


public static void main(String[] args) {

for(String host: args) {

try{

Socket theSocket = new Socket(host, 80);

System.out.println(theSocket.getInetAddress()+"의 "+theSocket.getPort()

+ "포트에" + theSocket.getLocalAddress()+"의 "+theSocket.getLocalPort()

+ "포트로 연결되었습니다.");

}catch(UnknownHostException e){

System.err.println(host + "를 찾을 수 없습니다.");

}catch(SocketException e){

System.err.println(host + "에 연결할 수 없습니다.");

}catch(IOException e){

System.err.println(e);

}

}

}

}


실행 결과