kakasoo

[TCP/IP] 인터넷 주소의 초기화와 할당 (window) 본문

프로그래밍/네트워크

[TCP/IP] 인터넷 주소의 초기화와 할당 (window)

카카수(kakasoo) 2020. 7. 15. 15:12
반응형
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#define _WINSOCK_DEPRECATED_NO_WARNINGS // inet_addr 함수 사용을 위함, ntoa에도 필요하다.
#define _CRT_SECURE_NO_WARNINGS // strcpy
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
 
void ErrorHandling(char* message) {
    fputs(message, stderr);
    fputc('\n', stderr);
    exit(1);
}
 
int main(int argc, char* argv[]) {
    WSADATA wsaData;
    if(WSAStartup(MAKEWORD(2,2), &wsaData) != 0)
        ErrorHandling("WSAStartup() Error!");
 
    /* inet_addr 함수 호출의 예 */
    {
        char* addr = "127.212.124.78";
        unsigned long conv_addr = inet_addr(addr);
        if (conv_addr == INADDR_NONE)
            printf("Error ococured!\n");
        else
            printf("Network ordered integer addr : %#1x \n", conv_addr);
    }
 
    /* inet_ntoa 함수 호출의 예 */
    {
        struct sockaddr_in addr;
        char* strPtr;
        char strArr[20];
 
        addr.sin_addr.s_addr = htonl(0x1020304);
        strPtr = inet_ntoa(addr.sin_addr);
        strcpy(strArr, strPtr);
        printf("Dotted-Decimal notation3 %s \n", strArr);
    }
 
    WSACleanup();
    return 0;
}
cs

 

블로그 주인장이 리눅스를 아직 다룰 줄 모르는 관계로 윈도우 code 만을 게시하고 있다.

코드에 대해서 주석 대신, 블로그를 통해서 설명한다.

 

inet_addr 함수는 문자열로 된 주소를 32bit의 주소 값으로 변환시키는 함수이며, 유효하지 않는 주소를 제외한다.

예컨대, 주소의 숫자 중 256에 해당하는 값 (255보다 큰 값)이 있으면, 자동적으로 오류를 감지해준다.

변환과 오류 감지를 동시에 해주는 셈이다.

 

inet_aton은 위의 함수와 동일한데, window에는 없어서 생략하였고,

간략한 설명만 적자면, 이 함수는 변환 후 다른 변수에 대입해줄 필요 없이 원래의 자료형에 대입해준다는 이점이 있다.

 

inet_ntoa 함수는 inet_aton 함수와 반대로 작동하는 함수이다.

주소를 문자열로 변환해서, 사람이 읽을 수 있는 값으로 바꿔 준다.

 

다음에는 TCP 기반 서버와 클라이언트다!

드디어 내가 배우고자 했던 부분이 나온다.

반응형