[java] 스트림을 이용한 네트워크 통신 방법

네트워크 통신은 자바에서 중요한 개념 중 하나입니다. 네트워크를 통해 데이터를 송수신해야 할 때, 스트림을 이용하면 간편하게 데이터를 전송할 수 있습니다. 이번 포스트에서는 자바에서 스트림을 이용한 네트워크 통신 방법에 대해 알아보겠습니다.

소켓과 포트

네트워크 통신을 위해서는 소켓과 포트라는 개념을 이해해야 합니다. 소켓은 네트워크를 통해 데이터를 송수신할 수 있는 엔드포인트로, 서버와 클라이언트 간의 통신에 사용됩니다. 포트는 서버나 클라이언트에서 열려 있는 소켓의 번호로, 특정 포트를 통해 특정 프로세스와 통신하게 됩니다.

서버 소켓

서버 소켓은 클라이언트의 연결을 수신하고 처리하기 위한 역할을 합니다. 별도의 스레드에서 실행되는 서버 소켓을 생성하고, accept() 메서드를 호출하여 클라이언트의 연결을 기다립니다.

try {
    ServerSocket serverSocket = new ServerSocket(5000);
    System.out.println("서버가 시작되었습니다.");

    while (true) {
        Socket clientSocket = serverSocket.accept();
        System.out.println("클라이언트가 연결되었습니다.");

        // 클라이언트와의 통신을 위한 스트림 생성 및 처리
        // ...

        clientSocket.close();
        System.out.println("클라이언트와의 연결이 종료되었습니다.");
    }
} catch (IOException e) {
    e.printStackTrace();
}

클라이언트 소켓

클라이언트 소켓은 서버에 연결하여 데이터를 전송하고 받을 수 있도록 합니다. 서버와 마찬가지로 별도의 스레드에서 실행되는 클라이언트 소켓을 생성하고, connect() 메서드를 호출하여 서버에 연결합니다.

try {
    Socket clientSocket = new Socket("localhost", 5000);
    System.out.println("서버에 연결되었습니다.");

    // 서버와의 통신을 위한 스트림 생성 및 처리
    // ...

    clientSocket.close();
    System.out.println("서버와의 연결이 종료되었습니다.");
} catch (IOException e) {
    e.printStackTrace();
}

스트림을 이용한 통신

서버와 클라이언트 간의 통신을 위해서는 스트림을 이용해 데이터를 주고받아야 합니다. getOutputStream() 메서드를 이용하여 출력 스트림을 생성하고, getInputStream() 메서드를 이용하여 입력 스트림을 생성합니다. 이후에는 스트림을 통해 데이터를 읽고 쓸 수 있습니다.

// 서버에서
OutputStream outputStream = clientSocket.getOutputStream();
PrintWriter writer = new PrintWriter(outputStream);
writer.println("Hello, client!");
writer.flush();

// 클라이언트에서
InputStream inputStream = clientSocket.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String message = reader.readLine();
System.out.println("서버로부터 받은 메시지: " + message);

결론

스트림을 이용한 네트워크 통신은 자바에서 강력한 기능 중 하나입니다. 서버 소켓과 클라이언트 소켓을 사용하여 네트워크 통신을 구현할 수 있으며, 스트림을 이용해 데이터 주고받기가 간편하게 가능합니다. 이를 활용하여 다양한 네트워크 애플리케이션을 개발할 수 있습니다.

참고 자료