3 n SOCKADDRIN IPv 4 typedef struct sockaddrin

  • Slides: 29
Download presentation

소켓 주소 구조체 (3) n SOCKADDR_IN 구조체 - IPv 4 전용 typedef struct sockaddr_in

소켓 주소 구조체 (3) n SOCKADDR_IN 구조체 - IPv 4 전용 typedef struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; } SOCKADDR_IN; // AF_INET // 포트 번호 // IPv 4 주소 // 0으로 설정 TCP/IP 윈도우 소켓 프로그래밍 4

소켓 주소 구조체 (4) n SOCKADDR_IN 6 구조체 - IPv 6 전용 typedef struct

소켓 주소 구조체 (4) n SOCKADDR_IN 6 구조체 - IPv 6 전용 typedef struct sockaddr_in 6 { short sin 6_family; // AF_INET 6 u_short sin 6_port; // 포트 번호 u_long sin 6_flowinfo; // 대부분 0으로 설정 struct in 6_addr sin 6_addr; // IPv 6 주소 u_long sin 6_scope_id; // 대부분 0으로 설정 } SOCKADDR_IN; TCP/IP 윈도우 소켓 프로그래밍 5

소켓 주소 구조체 (5) n IN_ADDR 구조체 - IPv 4 주소 저장용 typedef struct

소켓 주소 구조체 (5) n IN_ADDR 구조체 - IPv 4 주소 저장용 typedef struct in_addr { union { struct { u_char s_b 1, s_b 2, s_b 3, s_b 4; } S_un_b; struct { u_short s_w 1, s_w 2; } S_un_w; u_long S_addr; } S_un; #define s_addr S_un. S_addr } IN_ADDR; TCP/IP 윈도우 소켓 프로그래밍 6

소켓 주소 구조체 (6) n IN 6_ADDR 구조체 - IPv 6 주소 저장용 typedef

소켓 주소 구조체 (6) n IN 6_ADDR 구조체 - IPv 6 주소 저장용 typedef struct in 6_addr { union { u_char Byte[16]; u_short Word[8]; } u; } IN 6_ADDR; TCP/IP 윈도우 소켓 프로그래밍 7

바이트 정렬 함수 (4) n 바이트 정렬 함수(유닉스 호환) u_short htons(u_short hostshort); u_long htonl(u_long

바이트 정렬 함수 (4) n 바이트 정렬 함수(유닉스 호환) u_short htons(u_short hostshort); u_long htonl(u_long hostlong); u_short ntohs(u_short netshort); u_long ntohl(u_long netlong); n // host-to-network-short // host-to-network-long // network-to-host-short // network-to-host-long 바이트 정렬 함수(윈속 확장) int WSAHtons(SOCKET s, u_short hostshort, u_short *lpnetshort); int WSAHtonl(SOCKET s, u_long hostlong, u_long *lpnetlong); int WSANtohs(SOCKET s, u_short netshort, u_short *lphostshort); int WSANtohl(SOCKET s, u_long netlong, u_long *lphostlong); TCP/IP 윈도우 소켓 프로그래밍 13

바이트 정렬 함수 (6) n SOCKADDR_IN/SOCKADDR_IN 6 구조체의 바이트 정렬 방식 SOCKADDR_IN{} SOCKADDR_IN 6{}

바이트 정렬 함수 (6) n SOCKADDR_IN/SOCKADDR_IN 6 구조체의 바이트 정렬 방식 SOCKADDR_IN{} SOCKADDR_IN 6{} sin_family sin 6_family 네트워크 바이트 정렬 sin_port sin 6_port 호스트 바이트 정렬 sin_addr sin 6_flowinfo sin_zero sin 6_addr sin 6_scope_id TCP/IP 윈도우 소켓 프로그래밍 15

IP 주소 변환 함수 (3) n IPv 4 또는 IPv 6 주소 변환 함수(문자열

IP 주소 변환 함수 (3) n IPv 4 또는 IPv 6 주소 변환 함수(문자열 ⇒ 숫자) int WSAString. To. Address ( // 문자열 형식의 IP 주소 LPTSTR Address. String, // AF_INET 또는 AF_INET 6 INT Address. Family, // NULL LPWSAPROTOCOL_INFO lp. Protocol. Info, // IP 주소(숫자)를 저장할 구조체; SOCKADDR_IN 또는 SOCKADDR_I LPSOCKADDR lp. Address, // 주소 구조체의 길이 LPINT lp. Address. Length ); TCP/IP 윈도우 소켓 프로그래밍 18

IP 주소 변환 함수 (4) n IPv 4 또는 IPv 6 주소 변환 함수(숫자

IP 주소 변환 함수 (4) n IPv 4 또는 IPv 6 주소 변환 함수(숫자 ⇒ 문자열) int WSAAddress. To. String ( // 숫자 형식의 IP 주소; SOCKADDR_IN 또는 SOCKADDR_IN 6 LPSOCKADDR lpsa. Address, // 주소 구조체의 길이 DWORD dw. Address. Length, // NULL LPWSAPROTOCOL_INFO lp. Protocol. Info, // IP 주소(문자열)를 저장할 버퍼 LPTSTR lpsz. Address. String, // 버퍼의 길이 LPDWORD lpdw. Address. String. Length ); TCP/IP 윈도우 소켓 프로그래밍 19

도메인 이름 시스템과 이름 변환 함수 (3) n hostent 구조체 typedef struct hostent {

도메인 이름 시스템과 이름 변환 함수 (3) n hostent 구조체 typedef struct hostent { char* h_name; char** h_aliases; short h_addrtype; short h_length; char** h_addr_list; #define h_addr_list[0] } HOSTENT; // official name of host // alias list // host address type // length of address // list of addresses // address, for backward compatibility TCP/IP 윈도우 소켓 프로그래밍 24

도메인 이름 시스템과 이름 변환 함수 (4) n hostent 구조체 - IPv 4를 사용하는

도메인 이름 시스템과 이름 변환 함수 (4) n hostent 구조체 - IPv 4를 사용하는 경우 HOSTENT{} 공식 도메인 이름 h_name 별명 #1 h_aliases h_addrtype AF_INET h_length 4 별명 #2 NULL h_addr_list IN_ADDR{} IP 주소 #1 IP 주소 #2 NULL h_length = 4 TCP/IP 윈도우 소켓 프로그래밍 25

도메인 이름 시스템과 이름 변환 함수 (5) n hostent 구조체 - IPv 6를 사용하는

도메인 이름 시스템과 이름 변환 함수 (5) n hostent 구조체 - IPv 6를 사용하는 경우 HOSTENT{} 공식 도메인 이름 h_name 별명 #1 h_aliases h_addrtype AF_INET 6 h_length 16 별명 #2 NULL h_addr_list IN 6_ADDR{} IP 주소 #1 IP 주소 #2 NULL h_length = 16 TCP/IP 윈도우 소켓 프로그래밍 26

도메인 이름 시스템과 이름 변환 함수 (6) n 사용자 정의 함수 ① // 도메인

도메인 이름 시스템과 이름 변환 함수 (6) n 사용자 정의 함수 ① // 도메인 이름 -> IPv 4 주소 BOOL Get. IPAddr(char *name, IN_ADDR *addr) { HOSTENT *ptr = gethostbyname(name); if(ptr == NULL){ err_display("gethostbyname()"); return FALSE; } if(ptr->h_addrtype != AF_INET) return FALSE; memcpy(addr, ptr->h_length); return TRUE; } TCP/IP 윈도우 소켓 프로그래밍 27

도메인 이름 시스템과 이름 변환 함수 (7) n 사용자 정의 함수 ② // IPv

도메인 이름 시스템과 이름 변환 함수 (7) n 사용자 정의 함수 ② // IPv 4 주소 -> 도메인 이름 BOOL Get. Domain. Name(IN_ADDR addr, char *name, int namelen) { HOSTENT *ptr = gethostbyaddr((char *)&addr, sizeof(addr), AF_INET if(ptr == NULL){ err_display("gethostbyaddr()"); return FALSE; } if(ptr->h_addrtype != AF_INET) return FALSE; strncpy(name, ptr->h_name, namelen); return TRUE; } TCP/IP 윈도우 소켓 프로그래밍 28

Thank you TCP/IP 윈도우 소켓 프로그래밍 www. hanb. co. kr 29

Thank you TCP/IP 윈도우 소켓 프로그래밍 www. hanb. co. kr 29