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 |
댓글