프로그래밍

Commu 프로그램에서

by 손동진 posted May 21, 2011
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

위로 아래로 댓글로 가기 인쇄 쓰기 목록
?
  • WhiteAT 2011.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 를 추가하여 하나의 패킷구조로 통신해야 가능합니다.

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