개인 공부/네트워크
[Chapter 03-4] 인터넷 주소의 초기화와 할당
Koalitsiya
2023. 7. 20. 11:07
문자열 정보를 네트워크 바이트 순서의 정수로 변환
- sockaddr_in에 주소정보를 저장하기 위해 선언된 멤버는 32비트 정수형 = IP주소 정보의 변환 필요
- 문자열로 표현된 IP주소를 32비트 정수형으로 변환해 주는 함수 존재
inet_addr 함수
#include <arpa/inet.h>
in_addr_t inet_addr(const char * string);
//성공 시 빅 엔디안으로 변환된 32비트 정수 값, 실패 시 INADDR_NONE 리턴
- 32비트 정수형으로 변환하는 과정에서 네트워크 바이트 순서로 정렬도 수행
inet_aton 함수
#include <arpa/inet.h>
int inet_aton(const char * string, struct in_addr * addr);
성공 시 1, 실패 시 0 리턴
- inet_addr과 기능상으로는 동일
- 구조체 변수 in_addr을 이용
inet_ntoa 함수
#include <arpa/inet.h>
char * inet_ntoa(struct in_addr adr);
//성공 시 변환된 문자열의 주소 값, 실패 시 -1 리턴
- inet_aton과 반대되는 기능을 가짐
- 정수형 IP정보를 문자열 형태의 IP 정보로 변환
인터넷 주소의 초기화
struct sockaddr_in addr;
char *serv_ip = "127.0.0.1";
char *serv_port ="8080";
memset(&addr, 0, sizeof(addr));
addr.sin_family=AF_INET;
addr.sin_addr.s_addr=inet_addr(serv_ip);
addr.sin_port=htons(atoi(serv_port));
- inet_addr 함수와 htons 함수를 통해 sockaddr_in 구조체에 IP 정보와 PORT 번호를 초기화
- 클라이언트의 경우 IP주소를 따로 입력하지 않고 INADDR_ANY 상수를 통해 소켓이 동작하는 컴퓨터의 IP주소를
자동 할당할 수도 있음
소켓에 인터넷 주소 할당
#include <sys/socket.h>
int bind(int sockfd, struct sockaddr * myaddr, socklen_t addrlen);
//성공 시 0, 실패 시 -1 리턴