바이트 순서와 네트워크 바이트 순서 예제
앞서 배운 4개의 함수들의 사용 예제를 봐보자.
-

-
이제 위 사진의 내용을 이해해보자
-
6, 8번째 줄 : 각각 2byte, 4byte 데이터를 변수에 저장한다.
물론 위 예제를 실행하는 시스템의 CPU에 따라서 저장되는 바이트 순서는 다르다.
-
11, 12번째 줄 : 변수 host_port와 host_addr에 저장된 데이터를 네트워크 바이트 순서로 변환하고 있다.
만약 위 예제를 리틀 엔디안 기준으로 정렬하는 CPU상에서 실행한다면
바이트 순서가 네트워크 바이트 순서로 바뀐 값이 반환되어 변수에 저장된다.
-

-
위 사진의 실행 결과는 리틀 엔디안 방식으로 정렬하는 CPU에서의 실행결과이다.
참고로 Intel, AMD 계열의 CPU가 모두 리틀 엔디안을 기준으로 정렬한다.
-
※ 데이터 전송하기 전에 다 바꿔줘야 할까 ※
데이터 송수신 기준이 네트워크 바이트 순서다 보니,
데이터를 전송하기 전에 직접 네트워크 바이트 순서로 데이터를 변경해야 한다고 생각하고,
수신된 데이터도 호스트 바이트 순서로 변경해서 저장해야 한다고 생각할 수 있다.
만약 데이터 송수신 과정에서 네트워크 바이트 순서를 기준으로
자동으로 변환이 이뤄지지 않는다면 당연히 그리해야 한다.
하지만 이렇게 복잡한 일을 프로그래머에게 강요하진 않는다.
이러한 변환은 자동으로 이뤄지기 때문에
sockaddr_in 구조체 변수에 데이터를 채울 때 이외에는 바이트 순서를 신경 쓰지 않아도 된다.
'시작하지 말았어야 했던 것 > (Unix, Linux) C Socket' 카테고리의 다른 글
(리눅스) 문자열 정보를 네트워크 바이트 순서의 정수로(2) (0) | 2021.02.02 |
---|---|
(리눅스) 문자열 정보를 네트워크 바이트 순서의 정수로 변환 (0) | 2021.02.02 |
(리눅스) 바이트 순서(Order)와 네트워크 바이트 순서(2) (0) | 2021.02.02 |
바이트 순서(Order)와 네트워크 바이트 순서 (0) | 2021.02.02 |
(리눅스) 구조체 sockaddr_in의 멤버 정의 (0) | 2021.02.02 |