스테이트 풀
클라이언트 상태를 저장함
순서
서버 생성
클라이언트 생성
클 → 서버 (메시지를 지속적으로 전송)
클 → 서버 (메시지를 지속적으로 받음)
서버 → 클 (메시지를 지속적으로 전송)
서버 → 클 (메시지를 지속적으로 받음)
방화벽 체크 해야함
스레드 사용해서, 서버와 클라이언트 둘다 메시지를 지속적으로 전송 받을 수 있고
그동안 메시지를 작성할 수 있도록 한다.
(선생님과 같이한 버전)
(무슨 이유인지 다른 컴퓨터와 통신이 안되었다, 내가 적은 코드와 다른점은 소켓을 메인으로 꺼낸것)
서버
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);
}
}
}