소켓 프로그래밍이란?
소켓?
소켓은 네트워크 통신을 위한 인터페이스로, 두 컴퓨터간에 열린 통신 경로를 의미함. 네트워크 프로그래밍의 가장 기초적인 단위이다. 자세히는 프로세스가 네트워크를 통해 데이터를 주고받기 위한 엔드포인트이다.
- 프로세스가 소켓을 생성하면
- 해당 소켓은 고유한 주소를 가지게 되며
- 이 주소를 통해 다른 소켓과 데이터를 주고받는다.
- 여기서 주소는 IP 주소와 포트 번호로 구성되어있다.
소켓 프로그래밍이란?
컴퓨터간의 통신을 가능하게 하는 기술이다.
과정
- 서버에서 소캣을 생성한다.
- IP 주소와 포트 번호를 설정하여 소켓을 바인드 한다.
- 클라이언트로부터 연결 요청을 기다린다.
- 연결 요청이 들어오면 이를 수락하고 데이터를 읽는다.
소켓 API
- socket: 소켓 생성
- 주소 체계(domain)
- 소켓 유형(type)
- 프로토콜 (protocol)
- 예시: 인터넷 프로토콜(IP)을 사용하는 TCP/IP 네트워크를 위한 소켓 생성을 위해서, 주소 체계는 AF_INET, 소켓 유형은 SOCK_STREAM, 프로토콜은 0으로 사용
- bind: 소켓에 주소를 할당하는 함수
- 소켓 파일 설명자
- 주소 구조체를 가리키는 포인터
- 주소 구조체의 크기
- listen: 소켓이 연결 요청을 기다리도록 만드는 함수
- 소켓 파일 설명자
- 대기열의 최대 길이: 대기할 수 있는 연결 요청의 수
- accept: 연결 요청을 수락하는 함수
- 소켓 파일 설명자
- 클라이언트 주소 정보 저장할 구조체 가리키는 포인터
- 구조체의 크기
- connect: 다른 소켓에 연결하는 함수
- 소켓 파일 설명자
- 서버의 주소 정보를 담은 구조체를 가리키는 포인터
- 구조체의 크기
- send, recv: 데이터 송수신 함수
- send (보내는 측)
- 소켓 파일 설명자: accept() 함수가 반환한 소켓 파일 설명자
- 전송할 데이터 가리키는 포인터: 데이터는 문자열 형태
- 데이터 길이
- 옵션 플래그
- recv (받는 측)
- 소켓 파일 설명자
- 데이터를 저장할 버퍼 가리키는 포인터
- 버퍼의 크기
- 옵션 플래그
- send (보내는 측)
- close: 소켓을 닫는 함수
버퍼 관리
소켓 프로그래밍에서는 데이터 송수신을 위해 버퍼를 사용한다.
- 버퍼: 버퍼는 일종의 임시 저장 공간으로, 소켓으로 전송되거나 소켓에서 받은 데이터를 임시로 저장한다.
송신 버퍼
send 함수를 통해 데이터 전송할 때 사용한다. 데이터는 송신 버퍼에 복사되고, 네트워크 스택은 버퍼에서 데이터를 가져와 네트워크를 통해 전송한다.
수신 버퍼
수신 버퍼는 recv() 함수를 사용하여 데이터를 받을 때 사용된다. 네트워크 스택은 네트워크로부터 데이터를 받아 수신 버퍼에 저장한다.
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.