소켓(Socket)이란?
- 소켓은 프로토콜, ip주소, 포트넘버로 정의가 된다.
- TCP/UDP 두 가지 방식으로 분류 된다.
- TCP는 연결형 프로토콜이고, UDP에 비해 속도는 느리지만 신뢰성 있는 데이터 송수신을 보장한다. 여러 패킷으로 나누어 송신한다.
- UDP는 비연결형 프로토콜이고, TCP에 비해 통신의 신뢰성이 부족하다. 하지만 빠른 데이터 송수신이 가능하다.
- 주로 실시간으로 데이터를 주고받아야 하는 경우에 사용한다.
TCP/IP 4계층
- TCP/IP 기반 네트워크 통신에서 데이터 송수신의 마지막 접점을 말한다.
서버 & 클라이언트
- 소켓을 통해 서버와 클라이언트 간 데이터를 주고 받는 양항향 연결 지향성 통신을 말한다.
- 일반적으로 웹 서비스를 이용할 때 웹브라우저는 '클라이언트', 웹 서버는 '서버'에 해당한다.
서버
- socket()함수를 이용하여 소켓 생성한다.
- bind()함수로 ip와 port 번호 설정한다.
- listen()함수로 클라이언트의 접근 요청에 수신 대기열을 만들어 몇 개의 클라이언트를 대기 시킬지 결정한다.
- accept()함수를 사용하여 클라이언트와의 연결을 기다린다.
클라이언트
- socket() 함수로 가장먼저 소켓을 연다.
- connect() 함수를 이용하여 통신 할 서버의 ip와 port 번호에 통신을 시도한다.
- 통신 시도시, 서버가 accept() 함수를 이용하여 클라이언트의 socket descriptor를 반환한다.
- 이를 통해 클라이언트와 서버가 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을 반환한다.
다음엔 소켓 프로그래밍 서버 연결 코드로 돌아오겠습니다!
넘나리 어려운 것...😈
'JAVA > Information' 카테고리의 다른 글
[JSP] 내부 객체란? request, session, application? (0) | 2023.09.27 |
---|---|
[JSP] Servlet구조와 HTTP 상태 코드 총 정리‼️ (1) | 2023.09.20 |
[JAVA] 자바의 메소드(Method)란? 오버로딩(Overloading)이란? (0) | 2023.07.10 |
[JAVA] 자바 추상 클래스(abstract method)? (0) | 2023.07.07 |
[JAVA] 자바 언어의 장단점 및 특징 (2) | 2023.05.09 |