
서버
package ex17.half;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.nio.charset.StandardCharsets;
public class Server {
public static void main(String[] args) {
try {
ServerSocket serverSocket = new ServerSocket(20000); // socket(), bind(), listen()이 포함된 개념.
Socket socket = serverSocket.accept(); // accept()
// 소켓 연결 완료됨
// 요청을 받아야만 응답하기 때문에 동기적 실행
// 버퍼 만들기(received)
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String requestMsg = br.readLine();
System.out.println("클라이언트로부터 받은 메시지: " + requestMsg);
// 버퍼 만들기(send)
// 버퍼드롸이터를 하면 인풋스트림리더 이런거 만들어야 하는데 프린트롸이터를 쓰면 그게 다 구현되어 있어서 쓰기 편하다.
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true, StandardCharsets.UTF_8);
// OutputStream out, boolean autoFlush, Charset charset 차셋은 안 해도 됨.
// protocol: 만들 수 있는 근거는 프로토콜 표
if (requestMsg.equals("1")) {
pw.println("영화"); // println() 아니고 print()를 하면 "\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 {
Socket socket = new Socket("localhost", 20000);
PrintWriter pw = new PrintWriter(socket.getOutputStream(), true);
pw.println("3");
BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream()));
String responseMsg = br.readLine();
System.out.println("서버로부터 받은 메시지: " + responseMsg);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
}
Share article