소켓 프로 그래 밍 기본 데이터 구조 struct sockaddrin, struct sockaddr,struct in_addr

3077 단어
1. 구조 체 struct sockaddrin,  struct sockaddr,  struct in_addr
struct sockaddr_in,  struct sockaddr,struct in_addr, 이것 은 네트워크 프로 그래 밍 에서 자주 사용 하 는 구조 체 입 니 다. 매번 에 각자 의 구성원 이 무엇 인지 기억 하지 못 하고 임시 검 사 를 해 야 합 니 다. 나중에 볼 수 있 도록 여기 서 정리 하 겠 습 니 다.
struct sockaddr {unsigned short sa_family;  /* 주소 족, AF xxx * / char sa data [14]; /* 14 바이트 의 프로 토 콜 주소 * /};
위 는 일반적인 socket 주소 입 니 다. 인터넷 socket 까지 구체 적 으로 아래 구조 로 유형 변환 struct sockaddrin {short int sin family; / * 주소 족 * / unsigned short int sin port; / * 포트 번호 * / struct in addr sin addr; / * 인터넷 주소 * / unsigned char sin zero [8]; / * struct sockaddr 와 같은 길이 * /};
struct in_addr 는 32 비트 IP 주소 입 니 다.struct in_addr {unsigned long s_addr;};
struct in 도 있어 요.addr {union {struct { u_char s_b1,s_b2,s_b3,s_b4;} S_un_b;struct { u_short s_w1,s_w2;} S_un_w;u_long S_addr;} S_un;};이용 ulong htonl(u_long hostlong);호스트 바이트 순 서 를 TCP / IP 네트워크 바이트 순 으로 변환 합 니 다. u 이용short htons(u_short hostshort);호스트 바이트 순 서 를 TCP / IP 네트워크 바이트 순서 로 변환 합 니 다.
inet_addr () 는 점 분할 IP 주소 (예 를 들 어 192.168.0.1) 를 상기 구조 에 필요 한 32 비트 IP 주소 (0xC0A 80001) 로 변환 합 니 다.
일반적인 용법 은 int sockfd 입 니 다.struct sockaddr_in my_addr;sockfd = socket(AF_INET, SOCK_STREAM, 0); /* 오류 검 사 를 좀 하 세 요! * /
my_addr.sin_family = AF_INET; /* 호스트 바이트 순서 * / myaddr.sin_port = htons(MYPORT); /* short, 네트워크 바이트 순서 * / myaddr.sin_addr.s_addr = inet_addr(“192.168.0.1″);
bzero (& (my addr. sin zero), 8); / * zero the rest of the struct * / * bind () 에 대한 오류 검사 잊 지 마 세 요: * / bind (sockfd, (struct sockaddr *) & my addr, sizeof (struct sockaddr);
2. inet addr, inet aton, inet ntoa
inet_addr:  네트워크 주 소 를 네트워크 바 이 너 리 숫자 로 바 꾸 고 돌아 오 는 IP 주 소 는 네트워크 순서 입 니 다. 함수 원형: unsigned long in inet addr (const char * cp)
inet aton: 네트워크 주 소 를 네트워크 바 이 너 리 숫자 로 바 꿉 니 다. inet addr 와 의 차 이 는 결 과 는 반환 값 이 아니 라 인삼 inp 가 가리 키 는 in addr 구조 체 를 저장 하 는 것 입 니 다. 함수 원형: int inet aton (cont char * cp, struct in addr * inp)
inet ntoa: 네트워크 바 이 너 리 숫자 를 네트워크 주소 로 바 꿉 니 다. 함수 원형 은 char * inet ntoa (struct in addr in) 입 니 다.
3. 두 개의 업 데 이 트 된 함수 inet pton 과 inet ntop 가 있 습 니 다. 이 두 가지 함 수 는 ipv 4 와 ipv 6 를 처리 할 수 있 습 니 다. 원형 은 다음 과 같 습 니 다.
int inet_pton(int af, const char *src, void *dst);
              ,     af    ,     dst 

inet_pton  inet_addr   ,          :

AF_INET:src         , ASCII       (ddd.ddd.ddd.ddd   ),         in_addr    ,    *dst 

AF_INET6:rc   IPV6   ,,         in6_addr    ,    *dst 

             ,  errno   EAFNOSUPPORT,    af       src    ,     0。

 

  inet_ntop           
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
              ASCII     ,          ,        socklen_t cnt,        dst   ,    ,               ,        ,  errno  ENOSPC

좋은 웹페이지 즐겨찾기