본문 바로가기

JAVA/Information

[JAVA] 자바 소켓(Socket)통신 이란? 개념 정리

 

 

소켓(Socket)이란?

  • 소켓은 프로토콜, ip주소, 포트넘버로 정의가 된다.
  • TCP/UDP 두 가지 방식으로 분류 된다.
  • TCP는 연결형 프로토콜이고, UDP에 비해 속도는 느리지만 신뢰성 있는 데이터 송수신을 보장한다. 여러 패킷으로 나누어 송신한다.
  • UDP는 비연결형 프로토콜이고, TCP에 비해 통신의 신뢰성이 부족하다. 하지만 빠른 데이터 송수신이 가능하다.
  • 주로 실시간으로 데이터를 주고받아야 하는 경우에 사용한다.

 

 

TCP/IP 4계층

  • TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점을 말한다.

 

서버 & 클라이언트

  • 소켓을 통해 서버와 클라이언트  간 데이터를 주고 받는 양항향 연결 지향성 통신을 말한다.
  • 일반적으로 웹 서비스를 이용할 때 웹브라우저는 '클라이언트', 웹 서버는 '서버'에 해당한다.

서버

  1. socket()함수를 이용하여 소켓 생성한다.
  2. bind()함수로 ip와 port 번호 설정한다.
  3. listen()함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정한다.
  4. accept()함수를 사용하여 클라이언트와의 연결을 기다린다.

클라이언트

  1. socket() 함수로 가장먼저 소켓을 연다.
  2. connect() 함수를 이용하여 통신 할 서버의 ip와 port 번호에 통신을 시도한다.
  3. 통신 시도시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환한다.
  4. 이를 통해 클라이언트와 서버가 read(), write()를 하며 통신 ( 반복 )한다.

 

주요함수

1. socket(int domain, int type, int protocol)

- 소켓생성 하는 함수, 만약 소켓을 여는데 실패했다면 -1을 리턴한다.

 

2. connect(int fd, struct sockaddr *remote_host, socklen_t addr_length)

- 원격 호스트(원격 컴퓨터)와 연결하는 함수이다. 연결된 정보는 remote_host에 저장된다. 성공시 0, 오류시 -1을 반환한다.

 

3. bind(int fd, struct sockaddr *local_addr, socklen_t addr_length)

- 소켓의 주소를 할당한다. 프로세스는 소켓을 통해 다른 컴퓨터로부터 연결을 받아 주소를 할당한다.

 

4. listen(int fd, int backlog_queue_size)

- 소켓을 통해 들어오는 연결을 받고 대기한다. backlog_queue_size만큼 연결 요청을 큐에 넣는다. 성공시 0, 오류시 -1을 반환한다.

 

5. accept(int fd, sockaddr *remote_host, socklen_t *addr_length)

- 어떤 컴퓨터에서 이 컴퓨터로 연결할때 연결을 승인한다.

- 연결된 원격 컴퓨터의 정보는 remote_host에 저장되고, 오류시에 -1을 반환한다.

 

6. send(int fd, void* buffer, size_t n, int flags) 

- 데이터 송신을 담당한다. 보낸 바이트수를 반환하며 실패시 -1을 반환한다.

 

7. recv(int fd, void* buffer, size_t n, int flags)

- 데이터의 수신을 담당한다. n바이트를 buffer로 읽고 성공시 받은 바이트수를 반환하며 실패시 -1을 반환한다.

 

 

 

 

다음엔 소켓 프로그래밍 서버 연결 코드로 돌아오겠습니다!

넘나리 어려운 것...😈

 

반응형