눈팅하는 게임개발자 블로그
Socket Programming 본문
Socket
TCP/UDP IP 환경에서 통신을 위한 통로.
send / recv 함수를 통해 Data 송/수신
IP + Port 번호로 구성
예 ) 220.66.10.11(해당 컴퓨터의 IP 주소) + 80(해당 프로세스가 사용하는 Port No.) ==> 220.66.102.11:80
Client / Server 통신 절차
TCP 통신의 경우 연결 설정을 한 후 연결이 해제될 때까지
지속적으로 send, recv함수를 통해 통신이 가능하고 (전화 연결과 같다.)
UDP 통신의 경우 연결 설정 과정 없이
한 쪽에서 한 쪽으로 메시지를 보내는 것 처럼 통신이 가능하다. (문자 메시지 전송과 같다.)
Socket API
소켓 함수들
TCP API
socket() - 소켓을 생성하는 함수, 생성된 소켓의 디스크립터를 반환
connect() (client) - 목적 서버와 소켓을 연결
bind() - 소켓에 소켓 주소를 부여
listen() - 소켓을 활성화.
accept() (server) - 서버가 클라이언트의 connect()함수를 대기한다. client측에서 connect()함수 실행 시 연결된다.
send() - 연결이 설정된 상대 소켓에 데이터를 송신.
recv() - 연결이 설정된 소켓에서 데이터를 수신.
closesocket() - 소켓을 삭제. (리눅스의 경우 close())
UDP API
socket() - 소켓 생성 함수.
sendto() - 상대 소켓에 데이터를 송신.
recvfrom() - 상대 소켓으로부터 데이터를 송신.
closesocket() - 소켓을 삭제. (리눅스의 경우 close())
Socket API 흐름
TCP
클라이언트와 서버를 연결할 시
클라이언트 쪽의 connect()함수가 실행되기 전에
서버 쪽의 accept()함수가 먼저 실행되어야 한다.
UDP
주소의 표현
소켓 주소
프로토콜의 종류에 따라 사용하는 주소의 체계가 다르다.
AF_UNIX : 한 호스트에 존재하는 프로세스 사이의 통신을 지원.
AF_INET : 다른 호스트에 존재하는 프로세스 사이의 통신을 지원.
유닉스의 주소 체계는 파일 시스템의 경로명을 기반으로 함.
struct sockaddr_un {
short sun_family; // AF_UNIX
char sun_path[108]; // pathname
};
인터넷 주소 체계는 32비트 IP 주소와 16비트 포트 번호를 기반으로 함.
struct sockaddr_in {
short sin_family; // AF_INET
u_short sin_port; // Port number
struct in_addr sin_addr; // IP Address
char sin_zero[8]; // Padding
};
struct in_addr {
u_long s_addr;
};
통합 주소 체계
프로토콜마다 주소 체계를 지원하는 문법 구조가 다름.
문법 구조상 하나의 함수에서 다양한 주소 체계를 지원하는 데 어려움이 있음.
따라서 모든 주소 체계를 수용할 수 있는 공통 주소 체계가 필요하다.
struct sockaddr {
u_short sa_family;
char sa_data[14];
};
사용 예
addr : 주소 공간 자체는 해당 프로토콜의 주소 체계로 선언 (예의 경우 인터넷 주소 체계)
bind() 함수의 두 번째 매개 변수는 문법적으로 공통 주소 체계만 수용
struct sockaddr_in addr; //인터넷 주소 체계로 변수 선언
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = htonl(INADDR_ANY); // IP 주소
addr.sin_port = htons(5010); // Port 번호
bind(socket, (struct sockaddr *)&addr, sizeof(addr));
소켓 유형
SOCK_STREAM
연결형 서비스를 지원, AF_INET에서는 TCP 프로토콜을 사용.
SOCK_DGRM
비연결형 서비스를 지원, AF_INET에서는 UDP 프로토콜을 사용.
SOCK_RAW
IP 프로토콜을 직접 사용
'공부한거 > 네트워크 프로그래밍' 카테고리의 다른 글
TCP/IP 환경 (0) | 2020.09.25 |
---|---|
네트워크 이론 (0) | 2020.09.25 |