[java] Java 네트워크 프로그래밍

Java는 네트워크 프로그래밍을 위한 강력한 기능을 제공합니다. 네트워크를 통해 서버와 클라이언트 간의 통신이 가능하며, 다양한 네트워크 프로토콜을 지원합니다.

네트워크 기본 개념

네트워크 프로그래밍을 위해서는 몇 가지 기본 개념을 알아야 합니다.

IP 주소와 포트 번호

IP 주소는 컴퓨터를 식별하는 고유한 주소이며, 네트워크에서 데이터를 전송하기 위해 사용됩니다.

포트 번호는 서버나 클라이언트가 특정 애플리케이션에 접근하기 위한 식별자입니다. 포트 번호는 0부터 65535까지의 범위를 가지며, 특정 포트 번호는 특정 애플리케이션에 예약되어 있습니다.

소켓(Socket)

Java에서 네트워크 통신을 할 때 소켓(Socket)을 사용합니다. 소켓은 네트워크 연결을 위한 일종의 문이며, 데이터가 네트워크를 통해 들어오고 나가는 통로 역할을 합니다.

서버는 서버 소켓을 생성하여 클라이언트의 연결 요청을 처리하고, 클라이언트는 클라이언트 소켓을 생성하여 서버와 통신합니다.

Java 소켓 프로그래밍 예제

Java 소켓 프로그래밍을 통해 간단한 서버와 클라이언트를 구현해보겠습니다.

서버

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

public class Server {
    public static void main(String[] args) {
        try {
            // 서버 소켓 생성
            ServerSocket serverSocket = new ServerSocket(5000);

            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("서버로부터 응답 받음!");

            // 연결 종료
            clientSocket.close();
            serverSocket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

클라이언트

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

public class Client {
    public static void main(String[] args) {
        try {
            // 서버에 연결
            Socket socket = new Socket("localhost", 5000);
    
            System.out.println("서버와 연결됨!");
    
            // 서버로 메시지 전송
            PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
            out.println("안녕하세요 서버님!");
    
            // 서버로부터 응답 수신
            BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String message = in.readLine();
    
            System.out.println("서버로부터 수신한 응답: " + message);
    
            // 연결 종료
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

위 예제는 클라이언트가 서버에 연결하고 메시지를 전송한 후, 서버가 해당 메시지를 수신하고 응답을 보내는 간단한 네트워크 통신입니다.

마무리

Java의 네트워크 프로그래밍을 통해 서버와 클라이언트 간의 통신을 구현할 수 있습니다. Java를 사용하면 다양한 네트워크 프로토콜을 지원하며, 간단한 예제를 통해 기본 개념과 사용 방법을 익힐 수 있습니다.

더 깊은 내용을 공부하고 싶다면 Java 공식 문서나 관련 서적을 참고하는 것이 좋습니다.

Happy coding!