스테이트 풀

클라이언트 상태를 저장함

순서

서버 생성

클라이언트 생성

클 → 서버 (메시지를 지속적으로 전송)

클 → 서버 (메시지를 지속적으로 받음)

서버 → 클 (메시지를 지속적으로 전송)

서버 → 클 (메시지를 지속적으로 받음)

방화벽 체크 해야함

스레드 사용해서, 서버와 클라이언트 둘다 메시지를 지속적으로 전송 받을 수 있고

그동안 메시지를 작성할 수 있도록 한다.

(선생님과 같이한 버전)

(무슨 이유인지 다른 컴퓨터와 통신이 안되었다, 내가 적은 코드와 다른점은 소켓을 메인으로 꺼낸것)

서버

package ex17.multi;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Scanner;

public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(20000);
            Socket socket = serverSocket.accept();
            // 1. 소켓 연결 완료됨

            // 버퍼 생성
            BufferedReader br = new BufferedReader(
                    new InputStreamReader(socket.getInputStream(), "UTF-8")
            );

            // 2. 메시지 받기 스레드
            new Thread(() -> {
                while (true) {
                    try {
                        String requestMsg = br.readLine();
                        System.out.println("클라이언트로부터 받은 메시지 : " + requestMsg);
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            }).start();

            Scanner sc = new Scanner(System.in);
            PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);

            // 3. 메시지 전송 스레드
            new Thread(() -> {
                while (true) {
                    String keyboardMsg = sc.nextLine();
                    pw.println(keyboardMsg);
                }
            }).start();

        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }
}