public class Server_0 {
public static void main(String[] args) throws IOException {
Server_0 serve = new Server_0();
server.boot();
}
private void boot() throws IOException {
serverSocket = new ServerSocket(8000); // 8000번 포트 가진 소켓 생성
Socket socket = serverSocket.accept();
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
int oneInt = -1;
while(-1 != (oneInt = in.read())) { // read메서드가 -1을 반환하면 종료한다.
// InputStream의 read 메서드는 소켓에서 얻은 스트림의 연결이 끊어질 경우에 -1을 반환한다.
// 따라서 웹 브라우저의 [x] 버튼을 사용해 연결을 종료하면 루프탈출한다.
System.out.print((char)oneInt); // 표준출력에 표시
}
out.close();
in.close();
socket.close();
}
private ServerSocket serverSocket;
}
이후 컴파일하고 (java -d ...) 실행한다 (java -cp ...)
웹 브라우저에서 http://localhost:8000을 호출한다.
웹 브라우저가 8000번 포트로 HTTP 요청을 보내고 서버 명령창에서 HTTP GET 요청을 확인할 수 있다.
이 구조는 메세지의 끝을 '연결종료'로만 파악하기 때문에 좋지 않다. 왜냐하면 양방향 통신에 대해 요청에 대한 응답을 보낼 수 없기 때문이다. [x]를 눌러 이미 연결이 종료됐으므로.
=> 서블릿 컨테이너는 스트림을 사용해 Socket에서 한 바이트씩 읽어들이며 어느 시점에서 읽기를 중단할지 등을 판단한다. 이런 상태를 분석하는 코드를 HTTP 상태 기계라고 한다.
'【 개발 이야기 】 > 도서' 카테고리의 다른 글
코틀린 아카데미-함수형 프로그래밍. 쉽게 읽기!!! (0) | 2025.05.05 |
---|