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 로 확인 할수있습니다
'Network > 초급 TCP/IP socket' 카테고리의 다른 글
06. TCP 에코 클라이언트 소켓 (TCP ECHO CLIENT SOCKET) (0) | 2011.07.07 |
---|---|
05. UDP통신흐름 (0) | 2011.07.05 |
04. Server / Client TCP통신흐름 리눅스 프로그래밍 (0) | 2011.07.04 |
03. 주소의 표현 방식3가지와 전환 (0) | 2011.07.01 |
01. 네트워크 프로그래밍 (TCP/IP 소켓 프로그래밍) (6) | 2011.06.28 |