Socket이란?

시훈·2025년 3월 16일

해당 글은 2023. 10. 19에 작성되었습니다.

Socket

: 어플리케이션과 네트워크 사이의 인터페이스
: Application process와 end-end transport protocol(TCP, UDP) 사이에서의 인터페이스 역할

  • '문'과 같아서, 어플리케이션 프로세스가 다른 어플리케이션 프로세스로 메세지를 주고 받는 것을 가능하게 한다.
  • 어플리케이션은 socket으로 데이터를 받고, 보내고 싶은 data도 socket에 보내서 네트워크 전송을 한다.

2가지 종류의 socket이 있다.

1) TCP

  • 전달의 안정성 보장
  • 순서 보장
  • Connection으로부터 시작
  • bidirectional

2) UDP

  • 전달의 안정성 보장X
  • 순서 없음
  • Connection의 개념이 없다

Server와 Client의 상호작용의 관점에서 Socket을 보자

"Server와 Client는 공통의 Socket API를 통해서 메세지를 주고 받는다."

  1. Server는 client connection의 요청을 받을 준비를 한다.
ServerSocket servSock = new ServerSocket(servPort); // welcoming socket이 생성된다.

Socket cIntSocket = servSock.accept(); // "client의 요청이 온다면 받겠다"
  1. Server는 이제 client로부터 connection 요청이 올 때 까지 block되어있는 상태이다.
  1. Client가 Server와의 연결을 위한 Socket을 생성한다

    Socket socket = new Socket(serverIP, servPort); //Socket객체의 이름이 다른것에 유의하자.

  2. Server와 Client 사이에서 communicate이 일어난다.

InputStram in = cIntSock.getInputStream();
recvMsgSize = in.read(byteBuffer);
OutputStream out = socket.getOutputStream();
out.write(byteBuffer);
  1. Connection을 닫아준다.

요약을 하자면 다음과 같다.

Server

local Socket을 생성한다 by serverSocket
local socket을 특정 포트에 Bind한다
incoming connection을 기다린다
connection 요청이 오면 받아들이고, 연결을 위한 새로운 소켓을 할당한다 by Socket
데이터를 주고 받는다.

Client

Client는 Server의 address와 portnumber를 알고 있다.
local socket을 만든다 by Socket
Remote Socket을 연결한다
데이터를 주고 받는다


welcoming(listening) socket은 multiple clients와의 연결이 가능하도록 계속 기다린다.

끝!

profile
Backend Developer / Cloud Engineer

0개의 댓글