[java] 클래스와 객체를 이용하여 네트워크 통신을 하는 방법에 대해 설명해주세요.

네트워크 통신은 원격지 시스템과 데이터를 주고 받는 방법입니다. Java에서는 java.net 패키지를 사용하여 네트워크 통신을 구현할 수 있습니다. 이번 글에서는 클래스와 객체를 활용하여 Java로 네트워크 통신을 어떻게 할 수 있는지 알아보겠습니다.

서버의 구현

먼저, 네트워크 서버를 구현하는 클래스를 만들어 보겠습니다. 다음 코드는 간단한 에코 서버를 구현한 예제입니다.

import java.io.*;
import java.net.*;

public class EchoServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(1234);
            System.out.println("서버가 시작되었습니다.");

            while (true) {
                Socket clientSocket = serverSocket.accept();

                BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));
                PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    out.println("서버에서 받은 메시지: " + inputLine);
                }

                in.close();
                out.close();
                clientSocket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 ServerSocket은 클라이언트의 연결을 받는 역할을 합니다. ServerSocketaccept() 메서드를 호출함으로써 클라이언트의 연결을 기다립니다. 클라이언트가 연결되면 Socket 객체를 생성하여 통신을 처리합니다.

이 서버는 클라이언트로부터 받은 메시지를 다시 그대로 되돌려주는 에코 서버로, 클라이언트에서 보낸 메시지를 받아 출력한 후 다시 클라이언트로 전송합니다.

클라이언트의 구현

위에서 구현한 서버에 대응하는 클라이언트를 구현해보겠습니다. 다음은 간단한 에코 클라이언트를 구현한 예제입니다.

import java.io.*;
import java.net.*;

public class EchoClient {
    public static void main(String[] args) {
        try {
            Socket clientSocket = new Socket("localhost", 1234);
            System.out.println("서버에 연결되었습니다.");

            BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                out.println(inputLine);
                String response = in.readLine();
                System.out.println("서버로부터 받은 메시지: " + response);
            }

            in.close();
            out.close();
            clientSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 코드에서 Socket 클래스를 사용하여 서버에 접속합니다. 호스트 이름과 포트 번호를 인자로 전달하여 연결을 시도합니다. 서버와의 연결이 성공하면 서버로부터 받은 메시지를 입력하고, 서버로 전송한 후 서버로부터 다시 메시지를 받아 출력합니다.

실행 및 결과 확인

각각의 코드를 컴파일한 후 서버를 먼저 실행해야 합니다. 그런 다음 클라이언트를 실행하고 테스트 메시지를 입력하여 서버와의 통신이 잘 이루어지는지 확인할 수 있습니다.

이 외에도 Java에서는 다양한 네트워크 통신 라이브러리와 클래스를 제공하고 있으므로, 목적에 맞게 적절한 클래스와 객체를 활용하여 네트워크 통신을 구현할 수 있습니다.

이 글을 통해 Java를 이용한 네트워크 통신에 대한 기본적인 내용을 익히고 더 복잡한 동작을 구현할 수 있게 되었습니다. 추가적인 자세한 내용은 Java 공식 문서 및 다른 참고 자료들을 참고하시기 바랍니다.

참고 자료