본문 바로가기

Network/초급 TCP/IP socket

02. htons htonl ntohs ntonl (little endian / big endian)

intel cpu little endian를 사용합니다

    Num = 0x12345678 라고 입력했더라도

    메모리에는 78 56 34 12로 저장 되어 있습니다

 

지만 네크워크는 big endian을 사용합니다

참고))motorola cpu계열은 big endian을 사용합니다 바로 넘기면 됩니다!!


 순서대로 읽어드립니다 그래서 pc port ip를 받게되면

Num = 0x78563412 로 나타내게 되어 뒤집어지게 됩니다


그래서 error 가 발생하게 됩니다


struck sockaddr_in
에서

short + 2byte port 9190 경우

1)pc에서 네트워크로 전송시에는 : htons(host to network short)

2)네트워크에서 pc 전송시에는 : ntohs(network to host short)


long + 4byte ip
주소

1)pc에서 네트워크로 전송시에는 : htonl(host to network long)

2)네트워크에서 pc 전송시에는 : ntohl(network to host long)

 

요약하자면 이렇습니다


/* host에서 network로 저장되는것을 확인 하는 프로그램*/

 

#include <stdio.h>

int main ()
{
             short host_port_order = 0x1234;
             short net_port_order;
    
             long host_add_order = 0x12345678;
             long net_add_order;

             net_port_order = htons(host_port_order);
             net_add_order = htonl(host_add_order);

             printf("Host ordered port : %x \n", host_port_order);
             printf(" Nerwork ordered port : %x \n\n", net_port_order);

             printf("Host ordered address : %x \n", host_add_order);
             printf(" Nerwork ordered address : %x \n\n", net_add_order);

             return 0;
}

 

결과>>

호스트에 저장된 숫자(포트, ip)가 네트워크상에서 읽혀지도록 htons, htols를 사용하여

변환된 결과를 확인한 결과 1234 3412 로 확인 할수있습니다