Chapter04 – UNIX C 소켓
1. 정의
l 응용 프로그램을 개발할 때 TCP/UDP 또는 IP(raw socket)를 이용하여 프로그램을 개발 할 수 있도록 지원
l 유닉스/리눅스에서의 소켓 인터페이스
ü 파일 입출력과 유사한 구조
l 소켓 디스트립터
ü sd = socket(AF_INET, SOCK_STREAM, 0)
l 소켓 함수 포멧
ü int socket(int family, int type, int protocol)
ü family
Ø AF_INET: AF_INET(인터넷 주소 체계) -> 주로 사용
Ø AF_UNIX(유닉스 주소 체계)
Ø AF_INET6(128비트 IPv6 주소 체계) -> IPv6일 때 사용
ü type: 서비스 타입을 의미
Ø 연결형(stream) 서비스를 위해서는 SOCK_STREAM을 사용(연결은 대부분 TCP)
Ø 비연결형(datagram) 서비스를 위해서는 SOCK_DEGRAM을 사용(비연결형은 UDP)
ü Protocol: 소켓 지원 프로그램 지정, 보통 0 사용
l 소켓 프로그램에서는 소켓 주소를 담을 구조체
struct sockaddr{ /* 소켓의 타입과 형태 */
u_short sa_family; /* address family */
char sa_data[14]; /* address */
};
struct sockaddr_in{ /* 소켓에 들어가는 정보들 */
short sin_family; /* 주소 패밀리 */
u_short sin_port; /* 16비트 포트 번호 */
struct in_addr sin_addr; /* 32비트 IP 주소 */
char sin_sero[8]; /* 더미 문자열: 전체 크기를 맞추기 위함 */
}
l 소켓을 이용한 네트워크 연결 절차
ü 서버 진행 순서
socket( )
bind( ) -> 내가 지정한 IP주소와 포트번호와 TCP/UDP 결정됨
listen( ) -> 서버만 가지고 있음
accept( ) -> 클라이언트와 연결을 허용
---------------------------------------------------- 클라이언트 요청 시까지 대기
클라이언트 진행 방식
socket( )
connect( ) -> 서버와 연결 설정
read( ): 받을 준비 ß----- 요청 데이터 -------- write( )
write( ): 입력 준비 --------- 응답 데이터 ----à read( )
ü 만약 Thread가 하나라면 클라이언트가 데이터를 입력 도중에 다른 클라이언트는 데이터 입력이 불가능함
ü Sing Thread는 한 쪽에서 입력을 하면 한 쪽에서는 받을 준비를 해야 한다.
l 기본 과정
ü 서버가 소켓을 만든다.
ü 클라이언트가 서버의 소켓을 요청한다.
ü 서버는 해당 요청에 맞는 서비스를 만들어서 클라이언트와 통신을 한다.
ü 클라이언트를 서비스 하기 시작하면 서버의 소켓은 서비스와 분리 시킨다.
ü 서비스에서는 읽기, 쓰기 전용으로 나눈다.
ü 클라이언트 측에서도 읽기, 쓰기 전용으로 나눈다.
'3학년 > 네트워크 프로그래밍' 카테고리의 다른 글
TCP EchoServer (0) | 2018.10.11 |
---|---|
네트워크_Chapter05 - C# 스레드, 대리자(Delegate), 이벤트 (0) | 2018.10.01 |
네트워크_Chapter03 - RTP (0) | 2018.10.01 |
네트워크_Chapter02 - HTTPS (0) | 2018.10.01 |
네트워크_Chpater01 - HTTP (0) | 2018.09.07 |