티스토리 뷰

sockaddr_in에 주소정보를 저장하려면 선언된 멤버는 32비트 정수형이어야 한다.

따라서 32비트 형태로 IP주소를 표현하기위해 사용되는 함수가 inet_addr([변환할 IP주소]) 이다.


inet_addr(const char * string)

 - 문자열로 표현된 IP주소를 32비트 정수형으로 변환해주는 함수

 - 변환과정에서 네트워크 바이트 순서로의 변환, 정렬도 동시진행

 - 유효하지 못한 IP주소에 대한 오류검출 수행

 - 변환된 IP주소정보를 구조체 sockaddr_in의 in_addr변수에 추가로 대입해주어야 함.



마찬가지로 유사한 역할을 하는 함수가 하나 더 있다. inet_aton([변환할 IP주소], [in_addr 구조체 변수의 주소값])


inet_aton(const char * string, struct in_addr * addr)

 - inet_addr과 기능 유사, inet_addr보다 더 많이쓰인다

 - 다만 매개변수로 구조체 sockaddr_in의 in_addr변수의 주소를 넘기기때문에 추가대입이 필요없다.



반대로 네트워크 바이트 순서로 정렬된 정수형 IP주소정보를 문자열의 형태로 변환해주는 함수


inet_ntoa(struct in_addr adr)

 - 인자로 받아온 정수형태의 IP정보를 문자열형태의 IP정보로 변환 후, 변환된 문자열의 주소값을 반환

 - 즉, 반환형이 char포인터형 이다.

 - 다시말해 이 함수를 호출시 함수 내부적으로 메모리공간을 할당하여 문자열정보를 저장하므로

 - 재 호출 직전에 기존정보를 따로 변수에 담아두어 정보손실을 주의해야한다.



서버 : sockaddr_in구조체 변수에 서버소켓이 동작하는 컴퓨터의 IP, PORT번호로 초기화 한 다음 bind() 호출

클라이언트 : sockaddr_in 구조체 변수에 연결할 서버소켓의 IP, PORT번호로 초기화 한 다음 connect() 호출


sin_addr.s_addr = htonl(INADDR_ANY)

 - 소켓이 동작하는 컴퓨터의 IP주소가 자동으로 할당

 - 할당받은 IP중 어떤 주소를 통해서 데이터가 들어오더라도, PORT번호만 일치하면 수신가능

 - 서버프로그램 구현에 많이 선호되는 방식






# 네트워크 바이트순서로 변환된 값의 예제






# 실행결과






# inet_addr, inet_ntoa 사용 예제





'NETWORK' 카테고리의 다른 글

4) TCP 서버 함수호출 순서 및 함수분석  (0) 2018.04.24
3) TCP / UDP에 대한 이해  (0) 2018.04.24
1) 소켓멤버분석 : sockaddr_in구조체  (0) 2018.04.19
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/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
글 보관함