티스토리 뷰
순서나 기타 여러가지는 자세하게 나와있는 블로그들 많으니까 내가 실수하고 겪은 부분만 포스팅
- c++로 tcp/ip를 하다보면 시작부분에서 보통 Network Byte Ordering 을 배운다.
- 처음에는 잘 이해가 안가더라도 몇번 읽다보면 이해되는 그런 개념이었다.
- 다만 ip와 port는 htonl이나 htons 함수로 변환을 해줬는데 나머지 메세지나 그런 부분들은 변환해주는 부분이 없어서 의아했다.
- 윤성우의 tcp/ip에는 ip와 port만 해주면 나머지는 자동으로 해준다고 되어있다.
- 근데 아무리봐도 이해가 안가서 이것저것 찾아봤다.
결론
- Network Byte Ordering 즉 "byte"의 순서를 바꾸는 것이므로 최소 2바이트 이상 되는 크기의 정수형(실수도 관련이 있긴하지만 여기서는 생략)만의 문제가 되므로 몇가지 해결책이 존재한다.
- int, short는 htonl, htons를 통해서 변환해서 전송하기
- int, short를 문자열로 변환해서 전송하기 123을 문자열로 변경하면 "123"이고 이건 결국 char[3]에 순서대로 123이 들어가므로 문제 없다.(물론 나중에 다시 캐스팅을 해야겠지만.)
- 보통 우리가 사용하는 pc는 little일테니까 int를 예로 들면 낮은 주소에 높은 비트가 들어있는 4개의 바이트를 char[4]형에 변환해서 넣어준다. int{1,2,3,4} 이렇게 있다고 가정하고(숫자는 bit표현) char{4,3,2,1} 로 넣어주면 hton을 한것과 동일하므로(사실 이 방법은 결국 4byte씩 hton을 해주는 것과 다름이 없으므로 hton을 사용하면 된다.)
번외
- 실수와 8byte인 long long 같은 경우는 내가 찾아봤을때는 따로 함수가 존재하지 않는다.
- 그래서 스택오버플로 같은데서도 직접 변환하는 함수를 만들어서 사용하거나 아예 char[8]로 변환해서 보내는 방법을 사용하는 것 같다.
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- c 매크로
- 네트워크 오더링
- Builder #SuperBuilder
- Java8 #java stream
- MySql 날짜 차이 구하기
- 나만의 강점
- static의 장점 단점
- JPA #SPRING #ENTITY #DATABASE
- Java Double형 비교방법
- JPA #cascade
- javascript 문자열 뒤집기
- 매크로
- Double.compareTo(Double)
- ajax 403에러
- c++ 가변인자
- Til
- linux select
- 영속성전파
- JavaScript
- ##연산자
- 메소드 참조 연산자
- java
- C언어
- #define
- 이중 콜론 연산자
- JPQL 사용하기
- c 가변인자
- 전처리기
- 표준입출력 함수
- C++
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
글 보관함