Skip to content

Java Server Socket API

sue06004 edited this page Jul 17, 2023 · 2 revisions

Server Socket API

ServerSocket의 클래스는 서버 프로그램을 구현하는데 사용된다. 일반적인 서버의 프로그램의 과정은 Step1 ~ Step6으로 나눌 수 있다.

  • step1: 서버 소켓 생성, 포트 바인딩
  • step2: 클라이언트로부터 연결을 기다리고, 요청이 오면 수락
  • step3: 클라이언트 소켓에서 가져온 InputStream(클라이언트 쪽에서는 OutputStream)을 읽음
  • step4: 응답이 있다면 OutputStream을 통해 클라이언트에 데이터를 보냄
  • step5: 클라이언트와의 연결을 닫음
  • step6: 서버 종료

Step1: 서버 소캣 생성

다음 생성자 중 하나를 사용하여 ServerSocket 객체를 만든다.

ServerSocket(int port): 지정된 포트 번호에 바인딩 된 서버 소켓을 만듬 (연결 대기열 최대 수(backlog): 50)

ServerSocket(int port, int backlog): backlog개수를 원하는 값으로 설정 가능

ServerSocket(int port, int backlog, InetAddress bindAddr): 서버 소켓을 만들고 지정된 포트 번호와 로컬 ip주소에 바인딩

ServerSocket serverSocket = new ServerSocket(8000);

(I/O Exception이 일어 날 수 있음)

Step2: 요청이 들어오면 수락

Socket socket = serverSocket.accept();

요청이 안들어와있으며 block상태로 대기한다. 요청이 들어오면 포트가 다른, 클라이언트와 연결된 일반 소켓 객체를 한개 만든다.

Step3: 클라이언트에서 보낸 데이터 읽기

InputStream input = socket.getInputStream();
InputStream 처리
BufferedReader br = new BufferedReader(input)
String line = br.readLine();

Step4: 클라이언트에게 응답 보내기

Socket과 연결 된 클라이언트에게 OutputStream을 사용하여 데이터를 보낸다.

OutputStream output = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);

dos에 데이터를 write하여 응답을 보낸다. (꼭 DataOutputStream을 사용해야하는 것은 아니다.)

Step5: 클라이언트와 Connection 끊기

socket.close();

Step6: Server 종료

serverSocket.close();

Reference

https://woolbro.tistory.com/29
https://velog.io/@duck-ach/23.-%EC%9E%85%EC%B6%9C%EB%A0%A5-%EC%8A%A4%ED%8A%B8%EB%A6%BC-InputStream-OutputStream-JAVA https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=highkrs&logNo=220474124970