유니캐스트

2jun0·2022년 10월 2일
0

이전 포스트에 이어서 이번엔 유니캐스트의 개념에 대해서 알아보기로 한다.

유니캐스트

출처 : https://ko.wikipedia.org/wiki/유니캐스트

유니캐스트는 하나의 목적지에 데이터를 전송하는 방법이다.
가장 일반적인 방법으로, 우리가 저번에 했던 방식과 동일하다.

소켓으로 보는 유니캐스트

이번에는 가상머신을 이용해서 정말 통신이 되는 것을 확인 할 것이다.
서버 vm, 클라이언트 vm으로 나누어서 프로그램을 돌린다.
(가상머신 구축에 대한 설정은 넘어가겠다.)

  • 서버의 ip : 10.0.0.1
  • 클라이언트 ip : 10.0.0.2

아래는 서버 프로그램이다.

public class ServerSocket {
    public static void main(String[] args) throws IOException {
        java.net.ServerSocket serverSocket = new java.net.ServerSocket(6000);

        while(true) {
            Socket clientSocket = serverSocket.accept();
            System.out.println("clientSocket.getInetAddress() = " + clientSocket.getInetAddress());
            System.out.println("clientSocket.getLocalPort() = " + clientSocket.getLocalPort());
            System.out.println("clientSocket.getPort() = " + clientSocket.getPort());

            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(clientSocket.getOutputStream()));
            writer.write("hi client!");
            writer.flush();

            clientSocket.close();
        }

//        serverSocket.close();
    }
}

이번에는 서버는 데이터를 전송하기만 하고, 받지는 않겠다.
클라이언트는 데이터를 전송하기만 하면 된다.

아래는 클라이언트 프로그램이다.

public class ClientSocket {
    public static void main(String[] args) throws IOException {
        Socket socket = new Socket("10.0.0.1", 6000);

        System.out.println("socket.getInetAddress() = " + socket.getInetAddress());
        System.out.println("socket.getLocalPort() = " + socket.getLocalPort());
        System.out.println("socket.getPort() = " + socket.getPort());

        BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        String line = reader.readLine();
        System.out.println("read = " + line);

        socket.close();
    }
}

클라이언트에서 Socket객체를 생성자로 생성한게 보인다.
"10.0.0.1"는 서버의 ip를 가리키고, 6000은 서버 소켓이 열린 포트번호다.

결과

먼저, 서버는 다음과 같은 출력이 나왔다.

  • getInetAddress() : 원격 소켓의 ip 즉, 클라이언트의 ip
  • getLocalPort() : 로컬 소켓의 포트 즉, 서버 소켓이 열린 포트번호
  • getPort() : 원격 소켓의 포트 즉, 클라이언트 소켓이 열린 포트번호

클라이언트는 다음과 같은 출력을 내보냈다.

출력의 의미는 다음과 같다.

  • getInetAddress() : 원격 소켓의 ip 즉, 서버의 ip
  • getLocalPort() : 로컬 소켓의 포트 즉, 클라이언트 소켓이 열린 포트번호
  • getPort() : 원격 소켓의 포트 즉, 서버 소켓이 열린 포트번호

반대로 결과가 출력되는 것을 볼 수 있다.
이는 서로 바라보는 터널의 방향이 다르기 때문이라고 볼 수 있다.

마지막으로 서버에서 클라이언트로 보낸 hi client를 잘 받은 것을 볼 수 있다.

profile
끄적끄적

0개의 댓글