오늘 한일
오늘 컨디션이 좋아서 그런가 운이 좋아서 그런가 좌표에 맞는 데이터를 이벤트로 나타내는 것까지 한번에 해결할 수 있었다.
근데 이미 만들어놓은 이미지 위에 이벤트를 띄워서 프론트에 그리려고 하니까 그리는 방향으로 설정하니 문제가 생겼다.
바로 그릴 때마다 지웠다 다시 그려지는 이벤트 때문에 해당 이벤트가 깜빡 깜빡 거린다는 것이다.
보자마자 다시 그려서 깜빡깜빡 거린다는건 알겠는데..... 이런 개발이 처음이라 좀 난해 했다.
근데 게임에서도 사용되는 더블버퍼링 방식을 사용해서 해당 문제를 완화 할 수 있다는 소리를 들었다.
특정 애니메이션이나 그리는 이벤트가 일어날때 싱글 버퍼일 떄는 하나로 해결해야되서 중간에 생기는 지우는 텀이 보이지만 두개를 사용해서 버퍼2에 그리고 버퍼1이 그거를 가져와서 그리면서 버퍼1이 그릴때 버퍼2가 다시 데이터를 가져오는 방식으로 그려서 중간에 생기는 공백의 텀을 완화하는 방식이라 생각하면된다.
이거를 구현하는게 문제긴 한데....... 오늘은 이벤트 좌표로 나타나게 한것만으로 만족하고 하루를 보내자ㅋㅋㅋㅋㅋㅋ
퇴근 후 공부
주소값은 바이트 단위로 할당된다.
타입에 맞는 순서에 따라 네트워크가 주는 데이터가 순서가 다를 수 도 있다.
데이터를 주고 받는 방식에 따라서 컴퓨터마다 다른 데이터를 받을수 있다.
즉 네트워크는 규격화해서 그 규격으로 통신해야한다.
그 바이트순서를 규격화 한게 네트워크 바이트 오더(network byte order)이다.
빅엔디안 = 상위 바이트의 값을 작은 번지수에 저장
리틀 엔디안 = 상위 바이트의 값을 큰 번지수에 저장
ex) 전송된 데이터가 0x12345678 이었으면
빅엔디안은
0x12,0x34,0x56,0x78 이런식으로 보냄
리틀은
0x78,0x56,0x34,0x12 로 보냄
즉 보낸거에 상위 바이트 먼저 -> 빅엔디안
하위 바이트 부터 -> 리틀 엔디안
호스트 바이트 순서 = CPU별 데이터 저장방식을 의미함.
네트워크 바이트 순서 = 통일된 데이터 송수신 기준을 의미함.
네트워크 = 빅엔디안이 기준이다.
리틀 엔디안 기준이면 제대로 정렬해서 읽어야한다.
소켓이 내부적으로 송수신할때 내부적으로 엔디안을 다 맞춰줌
주의할점은
데이터의 송수신할 떄 엔디안 변환이 자동으로 되지만
소켓을 생성하는데 있어서 데이터를 보내는것은 명시적으로 다 바꿔줘야함.
즉 소켓생성과정에서는 우리가 엔디안은 적절히 변환을 해줘야한다.
unsigned short htons(unsigned short); -> 호스트 바이트 순서를 네트워크 바이트 순서로 변환
unsigned short ntons(unsigned short); -> 네트워크바이트 순서를 호스트 바이트순서로
즉 간단하게 보면
htonl 이면 host 순서 -> network 순서로 바꾸는것
여기서 short면 -> port
long 이면 -> ip 번호 이다.
우리는 이런 하나하나 바꾸는 걸 신경쓰기 어렵기 때문에 간단하게 다 바꿔야한다.
net_port = htons(host_port);
net_addr = htonl(host_addr);
소켓의 생성할때 바이트 관련 데이터를 주의 깊게 봐야하지만
생성 이후에는 크게 신경쓸 필요없다.
'일상,취미' 카테고리의 다른 글
다시 시작하는 TIL 13일차 (0) | 2024.06.24 |
---|---|
다시 시작하는 TIL 12일차 (0) | 2024.06.22 |
다시 시작하는 TIL 10일차 (0) | 2024.06.19 |
다시 시작하는 TIL 9일차 (0) | 2024.06.18 |
다시 시작하는 TIL8일차 (1) | 2024.06.17 |