... | @@ -621,15 +621,26 @@ class LambdaScope |
... | @@ -621,15 +621,26 @@ class LambdaScope |
|
|
|
|
|
9. **Network endian 스터디 보강**
|
|
9. **Network endian 스터디 보강**
|
|
|
|
|
|
|
|
**Big-Endian**
|
|
|
|
상위 바이트의 값을 작은 번지수부터 저장하는 방식.
|
|
|
|
빅 엔디언은 소프트웨어의 디버그를 편하게 해 주는 경향이 있다. 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 디버깅 과정에서 메모리의 값을 보기 편하기 때문이다.
|
|
|
|
|
|
|
|
**Little-Endian**
|
|
|
|
상위 바이트의 값을 큰 번지수부터 저장하는 방식.
|
|
|
|
리틀 엔디언은 메모리에 저장된 값의 하위 바이트들만 사용할 때 별도의 계산이 필요 없다는 장점이 있다.
|
|
|
|
|
|
|
|
하지만 두 엔디언 사이에 사실상 성능의 차이는 없다.
|
|
|
|
|
|
**호스트 바이트 순서**
|
|
**호스트 바이트 순서**
|
|
어떤 시스템(motorola, sun사 기계)은 Big-Endian, 어떤 시스템(intel사)은 Little-Endian을 사용하므로 일정하지 않다.
|
|
어떤 시스템(motorola, sun사 기계)은 Big-Endian, 어떤 시스템(intel사)은 Little-Endian을 사용하므로 일정하지 않다.
|
|
데이터 표현 방식이 다르므로 서로 다른 엔디안을 사용하는 플랫폼 사이에 데이터가 오고가면 문제가 발생한다.
|
|
데이터 표현 방식이 다르므로 서로 다른 엔디안을 사용하는 플랫폼 사이에 데이터가 오고가면 문제가 발생한다.
|
|
|
|
|
|
**네트워크 바이트 순서**
|
|
**네트워크 바이트 순서**
|
|
Big-Endian 방식을 적용하기로 하였다.
|
|
그래서 네트워크를 통해서 데이터를 전송할 때에는 데이터의 배열을 Big-Endian 기준으로 변경해서 송수신하기로 하였다.
|
|
|
|
네트워크 바이트 순서는 Big-Endian이다.
|
|
|
|
|
|
**바이트 순서 변환 함수**
|
|
**바이트 순서 변환 함수**
|
|
※ 어느 시스템에서 돌아갈 지 모르기 때문에 반드시 사용해야 한다.
|
|
※ 어느 시스템에서 작동할지 모르기 때문에 반드시 사용해야 한다.
|
|
unsigned short htons(unsigned short); // 호스트 -> 네트워크 short
|
|
unsigned short htons(unsigned short); // 호스트 -> 네트워크 short
|
|
unsigned short ntohs(unsigned short); // 네트워크 -> 호스트 short
|
|
unsigned short ntohs(unsigned short); // 네트워크 -> 호스트 short
|
|
unsigned long htonl(unsigned long); // 호스트 -> 네트워크 long
|
|
unsigned long htonl(unsigned long); // 호스트 -> 네트워크 long
|
... | @@ -637,6 +648,9 @@ class LambdaScope |
... | @@ -637,6 +648,9 @@ class LambdaScope |
|
|
|
|
|
C#에서는
|
|
C#에서는
|
|
IPAddress.HostToNetworkOrder() 나 IPAddress.NetworkToHostOrder()를 쓰면 된다.
|
|
IPAddress.HostToNetworkOrder() 나 IPAddress.NetworkToHostOrder()를 쓰면 된다.
|
|
|
|
숫자 26을 바이트 배열로 만들때
|
|
|
|
byte[] buffer = BitConverter.GetBytes(IPAddress.HostToNetworkOrder(26));
|
|
|
|
|
|
|
|
|
|
'h' : host byte order
|
|
'h' : host byte order
|
|
'n' : network byte order
|
|
'n' : network byte order
|
... | | ... | |