프로그래밍/네트워크
[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 기반 서버와 클라이언트다!
드디어 내가 배우고자 했던 부분이 나온다.
반응형