반응형
    
    
    
  
                              Notice
                              
                          
                        
                          
                          
                            Recent Posts
                            
                        
                          
                          
                            Recent Comments
                            
                        
                          
                          
                            Link
                            
                        
                    | 일 | 월 | 화 | 수 | 목 | 금 | 토 | 
|---|---|---|---|---|---|---|
| 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 | 
                            Tags
                            
                        
                          
                          - 백준
 - 자바스크립트
 - 타입스크립트
 - 크롤링
 - 쉬운 문제
 - javascript
 - 프로그래머스 레벨 2
 - dp
 - ip
 - TCP
 - typescript
 - 그래프
 - 레벨 1
 - HTTP
 - type challenge
 - dfs
 - Node.js
 - 타입 챌린지
 - 가천대
 - 소켓
 - 문자열
 - Algorithm
 - Crawling
 - 알고리즘
 - HTTP 완벽 가이드
 - Nestjs
 - BFS
 - 프로그래머스
 - socket
 - 수학
 
                            Archives
                            
                        
                          
                          - Today
 
- Total
 
kakasoo
[TCP/IP] 인터넷 주소의 초기화와 할당 (window) 본문
반응형
    
    
    
  | 
 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 기반 서버와 클라이언트다!
드디어 내가 배우고자 했던 부분이 나온다.
반응형
    
    
    
  '프로그래밍 > 네트워크' 카테고리의 다른 글
| [TCP/IP] TCP/IP 프로토콜 스택 (2) (0) | 2020.07.15 | 
|---|---|
| [TCP/IP] TCP/IP 프로토콜 스택 (1) (0) | 2020.07.15 | 
| [TCP/IP] htons, htonl의 윈도우 기반 사용 예 (0) | 2020.07.15 | 
| [TCP/IP] 주소정보의 표현 (자료형, 매크로 상수들이 있는 이유) (0) | 2020.07.15 | 
| [TCP/IP] 소켓에 할당되는 IP 주소와 PORT 번호? (0) | 2020.07.15 |