반응형

문자열 정보 -> 네트워크 바이트 순서의 정수

 

 

이제 네트워크 바이트 순서에 대해서도 알았으니, bind 함수를 비롯해서 앞에 설명했던 구조체를 활용해보자.

 

-

 

sockaddr_in 구조체 안에서 주소 정보를 저장하기 위해 선언된 멤버 변수는 32비트는 정수형으로 정의되어 있다.

 

따라서 우리는 IP주소 정보의 할당을 위해 32비트 정수 형태로 IP주소를 표현할 수 있어야 한다.

 

그러나 문자열 정보에 익숙한 우리들에게 매우 불편하지 않을 수 없는 일이다.

 

IP주소 "127.0.0.1"와 같이 점이 찍힌 십진수 표현방식(Dotted-Decimal Notation)에는 익숙하지만,

 

하나의 정수로 표현하는 데에는 익숙하지 않다.

 

그런데 다행히도 문자열로 표현된 IP주소를 32비트 정수형으로 변환해주는 함수가 있다.

 

게다가, 이 함수는 변환과정에서 자동으로 네트워크 바이트 순서로의 변환도 동시에 진행해준다.

 

아래 사진을 봐보자.

 

-

 

 

-

 

위 사진의 함수는 문자열 정보를 네트워크 바이트 순서의 정수로 변환해주는 함수이다.

 

위 함수의 인자로 127.0.0.1와 같이 점이 찍힌 10진수로 표현된 문자열을 전달하면,

 

해당 문자열 정보를 참조해서 IP주소 정보 32bit 정수형으로 반환한다.

 

물론 이 때 반환되는 정수는 네트워크 바이트 순서로 정렬되어 있다.

 

그리고 위 함수 선언의 반환형인 in_addr_t는 현재 32bit 정수형으로 정의되어 있다.

 

아래의 예제를 봐보자

 

-

 

inet_addr.c
0.00MB

 

 

 

-

 

위 사진의 예제는 inet_addr 함수의 활용한 예시이다.

 

핵심 의미를 봐보면

 

-

 

7번째 줄 : IP주소는 .(dot) 기호를 기준으로 4등분 되어있다.

 

각각 1byte씩 용량을 차지하여 총 4byte가 IP주소의 크기인데

 

1byte당 표현할 수 있는 최대 크기의 정수는 255까지로 1.2.3.256은 분명 잘못된 IP주소이다.

 

이 잘못된 주소를 이용해서 inet_addr 함수 오류 검출능력을 15번째 줄에서 확인한다.

 

-

 

9, 15번째 줄 : 실행결과를 통해서 9행의 함수 호출은 정상적인 결과로 이어지지만

 

15번째 줄의 함수 호출은 정상적인 결과로 이어지지 않는다.

 

-

 

실행결과

 

 

-

 

위 사진의 실행결과에서 보이듯이

 

inet_addr 함수 32bit 정수형태로 IP주소를 변환할 뿐만 아니라

 

유효하지 못한 IP주소에 대한 오류 검출 능력도 가지고 있다.

 

그리고 출력결과를 통해서 네트워크 바이트 순서로 정렬된 것도 알 수 있다.

 

그리고 다음 포스팅에서 소개하는 inet_aton 함수 기능상으로는 inet_addr 함수와 동일하다.

 

즉, 문자열 형태의 IP주소를 32bit 정수, 그리고 네트워크 바이트 순서로 정렬해서 반환한다.

 

다만 구조체 변수 in_addr를 이용하는 형태라는 점에서 차이가 있다.

 

참고로 활용도는 inet_aton 함수가 더 높다.

반응형

+ Recent posts