자바 I/O & NIO 네트워크 정리 7: 소켓

0

1. 🍖 소켓이란?

사용자에게 접근할 수 있는 인터페이스를 제공해준다.

2. 🍔 소켓의 사용

소켓을 사용하려면 소켓 생성(소켓열기),소켓을 통한 송신과 수신, 소켓소멸(소켓닫기)의 세가지 과정을 이해해야 한다.

1. 소켓의 세가지 형식

SOCK_STREAM : 바이트를 주고받을 수 있는 스트림 통신을 구현할 수 있게 해주는 소켓으로 양항향 통신 가능
SOCK_DGRAM : 데이터그램 통신용 소켓으로, SOCK_STREAM과 마찬가지로 양방향 통신이 가능하다.
SOCK_ROW : PING프로그램 사용

SOCK_STREAM형식은 다른말로 TCP라고 하며, SOCK_DGRAM형식은 UDP 라고 한다.

2. 인터넷 주소와 포트

네트워크를 통해서 정보를 전송하고 수신하려면 소켓이 필요하다.
소켓을 사용하려면 인터넷주소와 포트를 알고 있어야한다.

아파트 동 : IP(인터넷주소)
호 : PORT(포트)

하나의 컴퓨터에는 프로세스 여러개들이 소켓으로 통신하고, 각각의 소켓을 구분하기 위해 포트를 사용한다.
0부터 1023까지 숫자는 잘 알려진 포트로 유명 프로그램이 사용되도록 정해진 포트이며 1024이후를 사용하게 된다.

3. 🍕 InetAddress클래스를 활용한 도메인과 IP변환

컴퓨터와 통신하려면 IP 주소를 알고 있어야 하고, java.net패키지에는 IP와 관련된 중요한 클래스가 바로 InetAddress다.
InetAddress 객체는 생성자를 이용해서 객체를 생성하지 않고, 정적인 특성이 있는 다음의 메소드를 이용해서 객체를 생성한다.

1. InetAddress 클래스를 이용한 nslookup 명령 구현

public class NsLookup{
	public static void main(String[] args){
    	InetAddress inetaddr[] = null;
        try{
        inetaddr = InetAddress.getAllByName(args[0]);
        }catch(UnknownHostException e){
        e.printStackTrace();
        }
        for(int i = 0 ; i< inetaddr.length; i++){
        system.out.println(inetaddr[i].getHostName());
        system.out.println(inetaddr[i].getHostAddress());
        system.out.println(inetaddr[i].toString);
        }
    }

}

도메인이나 IP 주소를 getAllByName 메소드에 전달 하면, InetAddress[]가 반환된다.
이때 하나의 도메인은 여러개의 IP를 가질수 있기때문에 배열형태로 반환된다.

2. InetAddress 클래스를 이용한 로컬 컴퓨터명과 IP 구하기

public class NsLookup{
	public static void main(String[] args){
    	InetAddress inetaddr = null;
        try{
        inetaddr = InetAddress.getLocalHost();
        }catch(UnknownHostException e){
        e.printStackTrace();
        }
        system.out.println(inetaddr.getHostName());
        system.out.println(inetaddr.getHostAddress());
        
        system.out.println("byte[] 형식의 ip 주소값 출력");
        byte[] ip = inetaddr.getAddress();
        
    }

}
profile
쉽게 가르칠수 있도록 노력하자

0개의 댓글