단방향과는 다르게 서버와 클라이언트가 읽기, 쓰기 두개의 버퍼를 가진다.

스테이트 리스

클라이언트 상태를 저장못함

서버

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 -> 드라마