in 에 대하 여addr,inet_addr,inet_간단 한 소개

Technorati 태그: 소켓
여기 있 습 니 다.http://www.cppblog.com/izualzhy/archive/2012/07/28/185459.html두 개의 구조 체 를 소개 했다
struct sockaddr 와 struct sockaddrin 의 관계 와 차이.
그 중 struct sockaddr멤버
struct in_addr sin_addr;//인터넷 주소
원문 에서 이 구조 체 에 대해 충분 한 설명 을 했다.
struct inaddr 의 정 의 는 다음 과 같 습 니 다 (유 닉 스): typedef uint 32t in_addr_t;
struct in_addr {
in_addr_t s_addr;
};
그렇다면 이 구조 체 는 도대체 어떻게 사용 되 는 것 일 까?어떻게 값 을 부여 해 야 합 니까?
여 기 는 inetaddr () 입 니 다. 이 함 수 는 '192.168.1.1' 과 같은 ip 주소 문자열 을 바 꾸 는 데 사 용 됩 니 다.
in_addr_t 의 형식 (실제로는 uint 32 t, 즉 unsigned long).
예 를 들 어 192 에 대응 하 는 16 진 은 c0, 168 (a8) 이다.
역 과정 은 inet실현
예 와 운행 결 과 를 직접 보면 한눈 에 알 수 있 습 니 다 ~
/*
 * =====================================================================================
 *       Filename:  test.c
 *    Description:  sample of inet_ntoa,inet_addr 
 *        Created:  08/04/2012 01:23:39 PM
 *         Author:  zhy (), [email protected]
 * =====================================================================================
 */
#include <stdio.h>
#include <netinet/in.h>

int main()
{
    struct in_addr addr;
    char* straddr = malloc(16*sizeof(char));
    memset(straddr, 0, 16);

    addr.s_addr = inet_addr("192.168.1.1");
    printf("%x
"
,addr.s_addr); printf("%s
"
,inet_ntoa(addr)); addr.s_addr = inet_addr("172.27.1.1"); printf("%x
"
,addr.s_addr); printf("%s
"
,inet_ntoa(addr)); addr.s_addr = inet_addr("255.255.255.255"); printf("%x, %d
"
,addr.s_addr,addr.s_addr); printf("%s
"
,inet_ntoa(addr)); return 0; }

결과:
y@y-VirtualBox:/mnt/Documents/Training$ ./test101a8c0192.168.1.11011bac172.27.1.1ffffffff, -1255.255.255.255
동시에 알 수 있 습 니 다:
inet_addr () 가 되 돌아 오 는 주 소 는 이미 네트워크 바이트 형식 이 므 로 함수 htonl () 을 더 이상 호출 할 필요 가 없습니다.우 리 는 현재 위의 코드 세 션 이 매우 완전 하지 않다 는 것 을 발견 했다. 왜냐하면 그것 은 잘못된 검사 가 없 기 때문이다.뻔 하 다addr () 오류 가 발생 했 을 때 - 1 을 되 돌려 줍 니 다.이 바 이 너 리 숫자 들 을 기억 하 시 겠 습 니까?(기호 수 없 음) - 1 은 IP 주소 255.255.255.255 와 일치 합 니 다!이거 라디오 주소 야!큰 실수!먼저 오류 검 사 를 해 야 한 다 는 것 을 기억 해라.
이 넷adder 의 manpage 에서 도 언급 되 었 습 니 다:
The inet_addr() function converts the Internet  host  address  cp  fromIPv4  numbers-and-dots notation into binary data in network byte order.If the input is invalid, INADDR_NONE (usually -1) is returned.  Use  ofthis   function   is   problematic   because  -1  is  a  valid  address(255.255.255.255).   Avoid   its   use   in   favor   of   inet_aton(),inet_pton (3), or getaddrinfo (3) which provide a cleaner way to indicaterror return. ps: 제 가 궁금 한 것 은 'inetntoa 는 char * 를 되 돌려 주 고 외부 에서 직접 사용 할 수 있 으 며 free 가 필요 하지 않 습 니 다. 어떻게 했 습 니까?

좋은 웹페이지 즐겨찾기