[java] 자바 서버에서 소켓 프로그래밍

인터넷을 통해 데이터를 주고받기 위해 소켓 프로그래밍은 기본이 되는 기술 중 하나입니다. 자바에서 소켓 프로그래밍을 사용하여 서버와 클라이언트 간에 효과적으로 통신할 수 있습니다.

소켓 프로그래밍 기본 개념

소켓은 컴퓨터 네트워크를 통해 데이터를 교환하기 위한 연결점입니다. 소켓을 이용하여 서버와 클라이언트 사이에 양방향 통신이 가능합니다. 자바에서는 ServerSocketSocket 클래스를 통해 소켓 프로그래밍을 구현할 수 있습니다.

자바 소켓 프로그래밍 예제

다음은 자바를 사용하여 간단한 에코 서버와 클라이언트를 구현하는 예제입니다.

에코 서버

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

public class EchoServer {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(8888);
            Socket clientSocket = serverSocket.accept();
            PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()));

            String inputLine;
            while ((inputLine = in.readLine()) != null) {
                out.println(inputLine);
            }

            out.close();
            in.close();
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            System.out.println("Exception caught when trying to listen on port 8888 or listening for a connection");
            System.out.println(e.getMessage());
        }
    }
}

에코 클라이언트

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

public class EchoClient {
    public static void main(String[] args) {
        try {
            Socket echoSocket = new Socket("localhost", 8888);
            PrintWriter out = new PrintWriter(echoSocket.getOutputStream(), true);
            BufferedReader in = new BufferedReader(new InputStreamReader(echoSocket.getInputStream()));
            BufferedReader stdIn = new BufferedReader(new InputStreamReader(System.in));

            String userInput;
            while ((userInput = stdIn.readLine()) != null) {
                out.println(userInput);
                System.out.println("echo: " + in.readLine());
            }

            out.close();
            in.close();
            stdIn.close();
            echoSocket.close();
        } catch (UnknownHostException e) {
            System.err.println("Don't know about host: localhost");
            System.exit(1);
        } catch (IOException e) {
            System.err.println("Couldn't get I/O for the connection to: localhost");
            System.exit(1);
        }
    }
}

위의 예제는 클라이언트가 서버로 메시지를 보내면, 서버는 받은 메시지를 클라이언트로 다시 보내는 간단한 에코 기능을 구현한 것입니다.

마치며

소켓 프로그래밍을 통해 자바로 네트워크 통신을 구현할 수 있습니다. 이는 원격 시스템 간에 데이터를 안전하게 전송하고, 실시간 통신 기능을 구현하는 데 유용합니다. 소켓 프로그래밍의 기본 개념을 이해하고, 간단한 예제를 통해 실습해보면 네트워크 프로그래밍에 대한 이해도가 높아질 것입니다.

더 많은 정보는 Oracle 공식 자바 문서를 참조하세요.