<aside> <img src="/icons/info-alternate_blue.svg" alt="/icons/info-alternate_blue.svg" width="40px" /> 한 줄 요약

Socket은 요청, ServerSocket은 수락 (새로운 Socket 객체 반환) InputStream, OutputStream 써서 데이터 읽기, 전달

</aside>

Socket의 기본 개념

클라이언트 소켓: 클라이언트가 서버에 연결을 요청할 때 사용됩니다.

서버 소켓: 서버가 클라이언트의 연결 요청을 기다릴 때 사용됩니다. 서버 소켓이 클라이언트의 요청을 받아들이면, 새로운 Socket 객체가 생성되어 클라이언트와의 통신을 담당합니다.

Socket 객체: 두 컴퓨터 간의 네트워크 통신을 가능하게 하는 클래스입니다.

클라이언트 소켓: 서버에 연결을 요청하여 통신을 시작합니다.

서버 소켓: 클라이언트의 연결 요청을 기다리고 이를 수락하여 통신을 시작합니다

데이터 송수신: Socket 객체의 입력 스트림과 출력 스트림을 사용하여 데이터를 주고받습니다.

예1) Client에서 Server 연결 요청

import java.net.Socket;

public class SimpleClient {
    public static void main(String[] args) {
        String serverAddress = "localhost"; // 서버 주소
        int port = 12345; // 서버 포트 번호

        try (Socket socket = new Socket(serverAddress, port)) {
            System.out.println("서버에 연결되었습니다: " + socket.getRemoteSocketAddress());
            // 여기서 데이터 송수신을 위한 코드 작성
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

예2) Server에서 Client 연결 요청 수락

import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {
    public static void main(String[] args) {
        int port = 12345; // 서버 포트 번호

        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("서버가 포트 " + port + "에서 연결을 기다리고 있습니다.");

            try (Socket clientSocket = serverSocket.accept()) {
                System.out.println("클라이언트가 연결되었습니다: " + clientSocket.getInetAddress().getHostAddress());
                // 여기서 데이터 송수신을 위한 코드 작성
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

예3) Server와 Client 데이터 송수신 - Server

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class SimpleServer {
    public static void main(String[] args) {
        int port = 12345;

        try (ServerSocket serverSocket = new ServerSocket(port)) {
            System.out.println("서버가 포트 " + port + "에서 연결을 기다리고 있습니다.");

            try (Socket clientSocket = serverSocket.accept();
                 PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true);
                 BufferedReader in = new BufferedReader(new InputStreamReader(clientSocket.getInputStream()))) {

                System.out.println("클라이언트가 연결되었습니다: " + clientSocket.getInetAddress().getHostAddress());

                String inputLine;
                while ((inputLine = in.readLine()) != null) {
                    System.out.println("클라이언트로부터 받은 메시지: " + inputLine);
                    out.println("서버로부터의 응답: " + inputLine);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

예3) Server와 Client 데이터 송수신 - Client