[java] 서버와 클라이언트 간에 소켓 통신 구현하기

이번에는 자바를 사용하여 서버와 클라이언트 간에 소켓 통신을 구현하는 방법에 대해 알아보겠습니다. 소켓을 이용한 통신은 네트워크를 통해 데이터를 주고받을 수 있는 강력한 방법입니다.

서버 구현

먼저, 서버를 구현해보겠습니다. 서버는 클라이언트로부터 연결을 대기하고, 클라이언트가 연결되면 데이터를 주고받을 수 있습니다.

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

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            System.out.println("서버 대기 중...");

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

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

            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            out.println("서버에서 보낸 응답");

            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

클라이언트 구현

이어서, 클라이언트를 구현해보겠습니다. 클라이언트는 서버에 연결하고 데이터를 주고받을 수 있습니다.

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

public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("localhost", 8888);
            
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("클라이언트에서 보낸 메시지");

            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String response = in.readLine();
            System.out.println("서버로부터 받은 응답: " + response);

            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

이제 두 소스 코드를 실행하여 서버와 클라이언트 사이에 메시지를 주고받을 수 있습니다.

위의 예시는 간단한 텍스트 데이터를 주고받는 방법을 다루고 있지만, 실제 애플리케이션에서는 이를 확장하여 복잡한 데이터 형식이나 보안 기능을 구현할 수 있습니다.

소켓 통신은 네트워크 프로그래밍의 기본이며, 자바를 통해 이를 구현하는 것은 매우 강력하고 유용한 기술입니다.

참고 자료

위의 링크는 자바 공식 문서에서 제공하는 소켓 통신 관련 자료로, 소켓 통신에 대한 더 자세한 정보를 얻을 수 있습니다.