반응형
    
    
    
  
                              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 | 31 | 
                            Tags
                            
                        
                          
                          - 쉬운 문제
- Algorithm
- socket
- typescript
- Node.js
- 타입스크립트
- 레벨 1
- HTTP
- BFS
- 가천대
- javascript
- 프로그래머스 레벨 2
- ip
- dfs
- 소켓
- TCP
- 백준
- 타입 챌린지
- 자바스크립트
- dp
- 크롤링
- Crawling
- 수학
- 알고리즘
- type challenge
- 프로그래머스
- Nestjs
- HTTP 완벽 가이드
- 문자열
- 그래프
                            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 | 
 
                   
                  