
하나씩 해라!!!
- 서버 생성
- 클라이언트 생성
- 클라이어트 → 서버 (메시지를 지속적으로 전송)
- 서버 → 클라이언트(메시지를 지속적으로 전송)
서버
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.nio.charset.StandardCharsets;
import java.util.Scanner;
public class Server {
public static void main(String[] args) {
try {
// 1. 소켓과 버퍼 만들기
ServerSocket serverSocket = new ServerSocket(20000);
Socket socket = serverSocket.accept(); // accept()
Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true, StandardCharsets.UTF_8);
// 2. 메시지 받기 스레드
new Thread(() -> {
while (true) {
String requestMsg = null;
try {
requestMsg = br.readLine();
System.out.println("클라이언트로부터 받은 메시지: " + requestMsg);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
// 3. 메시지 쓰기 스레드
new Thread(() -> {
while (true) {
String keyboardMsg = sc.nextLine();
pw.println(keyboardMsg);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}).start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
클라이언트
package ex17.multi;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.Scanner;
public class Client {
public static void main(String[] args) {
try {
// 1. 소켓과 버퍼 만들기
Socket socket = new Socket("172.0.0.1", 20000);
Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
// 2. 메시지 쓰기 스레드
new Thread(() -> {
while (true) {
String keyboardMsg = sc.nextLine();
pw.println(keyboardMsg);
try {
Thread.sleep(500);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
}
}).start();
// 3. 메시지 받기 스레드
new Thread(() -> {
while (true) {
String requestMsg = null;
try {
requestMsg = br.readLine();
System.out.println("클라이언트로부터 받은 메시지: " + requestMsg);
} catch (IOException e) {
e.printStackTrace();
}
}
}).start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Share article