055_전이중 통신

Jan 10, 2024
055_전이중 통신

전이중 통신(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
RSSPowered by inblog