본문 바로가기
JAVA/LIBRARY

[JAVA] Socket

by melll93 2023. 1. 26.

1. 소켓(Socket)이란?

  • 프로세스 간의 통신에 사용되는 양 쪽 끝단(Endpoint)을 의미한다. 서로 멀리 떨어진 두 사람이 통신하기 위해선 전화기가 필요한 것처럼, 프로세스 간의 전화기 역할을 해주는 것이 소켓이다.
  • 소켓이 프로세스들의 전화기라면, 서버소켓은 전화교환기로 비유할 수 있다.
  • 양방향 통신으로 채팅, 동영상 스트리밍, 게임 등에 이용된다.
  • TCP/IP 프로토콜에서는 Socket과 ServerSocket 두 가지를 사용해 데이터 통신 환경을 만든다.
Socket 프로세스 간의 통신을 담당하며, InputStream과 OutputStream을 가지고 있다. 두 스트림을 통해 입출력 통신이 이루어진다.
ServerSocket 포트와 연결(bind)되어 사용자의 연결 요청을 기다리고, 요청이 들어오면 새로운 소켓을 생성하여 클라이언트 소켓과 통신이 이루어지도록 해준다.

 

서버와 클라이언트가 소켓 통신을 만드는 과정을 순서대로 살펴보자.
① 서버는 서버소켓을 사용해 특정 포트에서 클라이언트의 연결 요청을 처리할 준비를 한다. - step 1
② 클라이언트는 서버의 IP 주소와 포트 번호로 소켓을 생성하여 서버에 연결을 요청한다. - step 2
③ 서버는 클라이언트의 요청을 받으면 새로운 소켓을 생성하여 클라이언트의 소켓과 연결한다. - step 3
④ 클라이언트의 소켓과 서버의 소켓은 서버소켓과 관계없이 1:1 통신을 한다.

 

위 과정을 코드와 함께 살펴보자.
class Client {
    int PORTNUMBER;
    Socket socket = null;

    public void clientSocket() {
        try {
            socket = new Socket("IP ADRESS of SERVER", PORTNUMBER); // step 2
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

class Server {
    int PORTNUMBER;
    Socket socket = null;
    ServerSocket server = null;

    public void serverSocket() {
        try {
            server = new ServerSocket(PORTNUMBER); // step 1, '서버 소켓' (유일)
            while (true) {
                socket = server.accept(); // step3, 클라이언트 소켓에 대응되는 서버의 '소켓'
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}
반응형

'JAVA > LIBRARY' 카테고리의 다른 글

[JAVA] JSP Scriptlet  (0) 2023.02.17
[JAVA] Servlet & JSP  (0) 2023.02.16
[JAVA] Thread (3) - Synchronize  (0) 2023.01.12
[JAVA] Thread (2) - State, Scheduling, Priority, Daemon  (0) 2023.01.11
[JAVA] Thread(1) - 개념  (0) 2023.01.10

댓글