단방향과는 다르게 서버와 클라이언트가 읽기, 쓰기 두개의 버퍼를 가진다.
스테이트 리스
클라이언트 상태를 저장못함
서버
package ex17.half;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.Charset;
// 반이중
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(20000);
Socket socket = serverSocket.accept();
// 소켓 연결 완료됨
// 버퍼 생성
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream(), "UTF-8")
);
String requestMsg = br.readLine();
System.out.println("클라이언트로부터 받은 메시지 : " + requestMsg);
// 버퍼 만들기 (send)
// 플러시 자동 (true)
// UTF-8 자동
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
if (requestMsg.equals("1")) {
pw.println("영화"); // \\n 자동
} else if (requestMsg.equals("2")) {
pw.println("드라마");
} else {
pw.println("프로토콜을 확인하세요 : 1은 영화, 2는 드라마");
}
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
클라이언트
package ex17.half;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
public class Client {
public static void main(String[] args) {
try {
// 127.0.0.1 = localhost
Socket socket = new Socket("localhost", 20000);
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
pw.println("1");
BufferedReader br = new BufferedReader(
new InputStreamReader(socket.getInputStream(), "UTF-8")
);
String responseMsg = br.readLine();
System.out.println("서버로 부터 받은 메시지 : " + responseMsg);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
프로토콜
1 -> 영화
2 -> 드라마