포스트

소켓 프로그래밍이란?

소켓?

소켓은 네트워크 통신을 위한 인터페이스로, 두 컴퓨터간에 열린 통신 경로를 의미함. 네트워크 프로그래밍의 가장 기초적인 단위이다. 자세히는 프로세스가 네트워크를 통해 데이터를 주고받기 위한 엔드포인트이다.

  1. 프로세스가 소켓을 생성하면
  2. 해당 소켓은 고유한 주소를 가지게 되며
  3. 이 주소를 통해 다른 소켓과 데이터를 주고받는다.
  • 여기서 주소는 IP 주소와 포트 번호로 구성되어있다.

소켓 프로그래밍이란?

컴퓨터간의 통신을 가능하게 하는 기술이다.

과정

  1. 서버에서 소캣을 생성한다.
  2. IP 주소와 포트 번호를 설정하여 소켓을 바인드 한다.
  3. 클라이언트로부터 연결 요청을 기다린다.
  4. 연결 요청이 들어오면 이를 수락하고 데이터를 읽는다.

소켓 API

  • socket: 소켓 생성
    • 주소 체계(domain)
    • 소켓 유형(type)
    • 프로토콜 (protocol)
    • 예시: 인터넷 프로토콜(IP)을 사용하는 TCP/IP 네트워크를 위한 소켓 생성을 위해서, 주소 체계는 AF_INET, 소켓 유형은 SOCK_STREAM, 프로토콜은 0으로 사용
  • bind: 소켓에 주소를 할당하는 함수
    • 소켓 파일 설명자
    • 주소 구조체를 가리키는 포인터
    • 주소 구조체의 크기
  • listen: 소켓이 연결 요청을 기다리도록 만드는 함수
    • 소켓 파일 설명자
    • 대기열의 최대 길이: 대기할 수 있는 연결 요청의 수
  • accept: 연결 요청을 수락하는 함수
    • 소켓 파일 설명자
    • 클라이언트 주소 정보 저장할 구조체 가리키는 포인터
    • 구조체의 크기
  • connect: 다른 소켓에 연결하는 함수
    • 소켓 파일 설명자
    • 서버의 주소 정보를 담은 구조체를 가리키는 포인터
    • 구조체의 크기
  • send, recv: 데이터 송수신 함수
    • send (보내는 측)
      • 소켓 파일 설명자: accept() 함수가 반환한 소켓 파일 설명자
      • 전송할 데이터 가리키는 포인터: 데이터는 문자열 형태
      • 데이터 길이
      • 옵션 플래그
    • recv (받는 측)
      • 소켓 파일 설명자
      • 데이터를 저장할 버퍼 가리키는 포인터
      • 버퍼의 크기
      • 옵션 플래그
  • close: 소켓을 닫는 함수

버퍼 관리

소켓 프로그래밍에서는 데이터 송수신을 위해 버퍼를 사용한다.

  • 버퍼: 버퍼는 일종의 임시 저장 공간으로, 소켓으로 전송되거나 소켓에서 받은 데이터를 임시로 저장한다.

송신 버퍼

send 함수를 통해 데이터 전송할 때 사용한다. 데이터는 송신 버퍼에 복사되고, 네트워크 스택은 버퍼에서 데이터를 가져와 네트워크를 통해 전송한다.

수신 버퍼

수신 버퍼는 recv() 함수를 사용하여 데이터를 받을 때 사용된다. 네트워크 스택은 네트워크로부터 데이터를 받아 수신 버퍼에 저장한다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.