TCP/IP

호스트pc(리틀엔디안) <-> 네트워크(빅엔디안)

알 수 없는 사용자 2011. 7. 1. 15:39
네트워크 상에서는 빅엔디안을 사용
htons()함수 : 호스트에서 port번호(2바이트)를 네트워크로 바꿀 때 사용
ntohs()함수 : 네트워크에서 port번호(2바이트)를 호스트로 바꿀 때 사용
htonl()함수 : 호스트에서 IP주소(4바이트)를 네트워크로 바꿀 때 사용
ntohl()함수 : 네트워크에서 IP주소(4바이트)를 호스트로 바꿀 때 사용

h는 host, n은 network, s는 short(2byte), l은 long(4byte)


P  C                                              네트워크
리틀엔디안                                     빅엔디안

2byte(port번호)  --------------------->
                        htons()함수 사용

                       <--------------------
                        ntohs()함수 사용

4byte(IP 주소)   --------------------->
                        htonl()함수 사용

                      <---------------------
                        ntohl()함수 사용                        


#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("Network ordered port : %x\n\n", net_port_order);

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

  return 0;
}