
전이중 통신(Full-Duplex Communication)
- 두 장치가 송수신 할 수 있는 통신 방식이다. → 양방향으로 동시에 통신이 가능한 방식이다.
- 서로 읽기와 쓰기가 가능해야 하는데 이를 스레드를 이용해서 가능하도록 만든다.
- 효율적으로 데이터 교환을 가능하게 하며, 실시간 통신에 유리하다.
전이중 코드
- 서버 코드
package ex17.multi;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
    public static void main(String[] args) {
        try {
            ServerSocket serverSocket = new ServerSocket(10000);
            Socket socket = serverSocket.accept();
            Thread t1 = new Thread(() -> {
                try {
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
                    while (true) {
                        String requestMsg = br.readLine();
                        if ("1".equals(requestMsg)) {
                            break;
                        }
                        System.out.println("클라이언트로 부터의 메세지 : " + requestMsg);
                    }
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
            Thread t2 = new Thread(() -> {
                try {
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
                    BufferedReader keyBr = new BufferedReader(new InputStreamReader(System.in));
                    while (true) {
                        String msg = keyBr.readLine();
                        if (msg == "1") {
                            break;
                        }
                        bw.write(msg + "\n");
                        bw.flush();
                    }
                    socket.close();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
            t1.start();
            t2.start();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}- 클라이언트 코드
package ex17.multi;
import java.io.*;
import java.net.Socket;
public class Client {
    public static void main(String[] args) {
        try {
            Socket socket = new Socket("192.168.0.81", 10000);
            Thread t1 = new Thread(() -> {
                try {
                    BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));
                    while (true) {
                        String requestMsg = br.readLine();
                        if ("1".equals(requestMsg)) {
                            break;
                        }
                        System.out.println("서버로 부터의 메세지 : " + requestMsg);
                    }
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
            Thread t2 = new Thread(() -> {
                try {
                    BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), "UTF-8"));
                    BufferedReader keyBr = new BufferedReader(new InputStreamReader(System.in));
                    while (true) {
                        String msg = keyBr.readLine();
                        if (msg == "1") {
                            break;
                        }
                        bw.write(msg + "\n");
                        bw.flush();
                    }
                    socket.close();
                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            });
            t1.start();
            t2.start();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
}구현 시 스레드에 람다식을 활용하여 간단하게 구현이 가능하였다.
Share article