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