메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
WhiteAT2011.05.21 21:07

문자가 8바이트씩 들어오지는 않을 겁니다.;;

항상 달라질수 있습니다. int nRcvSize 변수값에 수신된 바이트 수가 있으니 확인하실수 있을 겁니다.~~

 

예를 들어 24바이트를 받아야 하는데, 8바이트씩 3번 받을수도 있고, 7+7+7+3 바이트로 받을 수도 있습니다.

이런 이유는 수신쓰레드가 무한히 돌면서 수신된 값이 있을 때마다 메세지를 날리는데,

메세지 날아오는 간격이 일정치 않아서 그런겁니다.;;

쓰레드에 대해 아시면 쉽게 이해하실텐데.. 일단 이것은 모르셔도 됩니다;;;;

 

해결방법은

전역 변수로 문자열을 만들고 그 문자열에 수신데이터를 계속 쌓으면 됩니다.

그리고 수신된 데이터를 분석하고, 필요 없으면 버리고, 유요한 데이터면 사용하면 됩니다.

 

예를 들어, "ABCDEF", "GH1234" , "5678" 로 3번 값이 들어오던

                   "ABCD", "EFGH12", 345678" 로 값이 오던,  

     "ABCDEFGH12345678" 라는 데이터가 들어오게 됩니다.

일단 이런식으로 데이터를 받으면 놓치는 데이터는 없을 겁니다.

 

 

2번 같은 경우는,

STX, ETX, CRC 를 추가하여 하나의 패킷구조로 통신해야 가능합니다.

먼저 수신된 데이터가  유효한지를 검사해야 원하는 위치의 데이터를 얻을 수 있습니다.

 

 
사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )