in 에 대하 여addr,inet_addr,inet_간단 한 소개
여기 있 습 니 다.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 가 필요 하지 않 습 니 다. 어떻게 했 습 니까?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.