전이중 실습
Jan 10, 2024

- 서버 생성
- 클라이언트 생성
- 클라이언트 → 서버 (메시지를 지속적으로 전송)
서버
1
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.Charset;
public class Server {
public static void main(String[] args) {
try {
// 1. 소켓과 버퍼 만들기
ServerSocket serverSocket = new ServerSocket(20000);
Socket socket = serverSocket.accept();
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
// 2. 메시지 받기 스레드
new Thread(() -> {
while (true) {
try {
String requestMsg = br.readLine();
System.out.println("클라이언트로부터 받은 메시지 : " + requestMsg);
} catch (Exception e) {
e.printStackTrace();
}
}}).start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
2
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.Charset;
import java.util.Scanner;
public class Server {
public static void main(String[] args) {
try {
// 1. 소켓과 버퍼 만들기
ServerSocket serverSocket = new ServerSocket(20000);
Socket socket = serverSocket.accept();
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
Scanner sc = new Scanner(System.in);
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
// 2. 메시지 받기 스레드
new Thread(() -> {
while (true) {
try {
String requestMsg = br.readLine();
System.out.println("클라이언트로부터 받은 메시지 : " + requestMsg);
} catch (Exception e) {
e.printStackTrace();
}
}}).start();
// 3. 메시지 전송 스레드
new Thread(() -> {
while (true) {
String keyboardMsg = sc.nextLine();
pw.println(keyboardMsg);
}
}).start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
클라이언트
1
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("localhost", 20000);
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
// 2. 메시지 전송 스레드
new Thread(() -> {
while (true) {
String keyboardMsg = sc.nextLine();
pw.println(keyboardMsg);
}
}).start();
// 3. 메시지 읽기 스레드
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
2
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("192.168.0.44", 10000);
Scanner sc = new Scanner(System.in);
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream())
);
// 2. 메시지 전송 스레드
new Thread(() -> {
while (true) {
String keyboardMsg = sc.nextLine();
pw.println(keyboardMsg);
}
}).start();
// 3. 메시지 읽기 스레드
new Thread(() -> {
while (true) {
try {
String serverMsg = br.readLine();
System.out.println("서버로부터 받은 메시지 : " + serverMsg);
} catch (Exception e) {
e.printStackTrace();
}
}
}).start();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Share article