C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[54077] 감사합니다. 하지만...
번외편 [wifemylove] 1292 읽음    2008-07-24 16:22
그걸 처음부터 생각하고 짠건 아니지만 0x0d가 들어오기전에는 버퍼를 초기화 시키지
않기 때문에 count 가 나누어져서 들어와도 문제가 되지 않을까 생각하는데요...
만약 hel가 첫번째에 들어오고 lo가 두번째에 들어오면
data [0] = h [1] = e [2] = l 이 들어가고 0x0d가 들어오지 않았기 때문에
그다음에 들어온 lo는 data [3] = l data [4] = o 에 쌓여서
그다음에 data와 buff를 비교를 할것 같습니다.

memicmp는 문자열 전체를 비교해서 같으면 0을 리턴해주기 때문에 맞추기가 어렵네요..
strcmp인가요? 이 비교문은 리턴을 3가지로 해주네요 이걸로 해봐야겠습니다.

less than s2    < 0
the same as s2    == 0
greater than s2    > 0


조각발 님이 쓰신 글 :
: 저도 거의 질문만 올리다가요..
:
: 혹시 데이터가 들어오는 양(?)을 확인해보셨나요??
:
: 저도 전에 비슷하게 해봤는데..(제 질문두 게시판에 있구여..보실 필욘 없음)
:
: 저는 5바이트를 한 패킷으로 통신하는 걸 해봤는데요..
:
: 그게 ComPort 의 OnRxChar에서 Count 가 정확히 5바이트로 들어오지 않더라구요..
:
: 어떨때는 4바이트 들어오고 다음에 1바이트..
: 어떨때는 3바이트 들어오고 다음에 2바이트..
: 어떨때는 5바이트 한번에 들어오고..
:
: 이거 한번 확인해보세요..
:
:
: 번외편 님이 쓰신 글 :
: : 아래와 같이 하면 맨처음에 Hello나 Enter user name:  또는 Enter login password: 가
: : 들어오면 리턴을 해주는데
: : 맨처음이 아니라 데이터를 송수신 하다가 Hello 등이 들어오면 리턴을 제대로 해주지 않는군요
: : 제가 생각할때는 초기화가 제대로 되지 않는것 같아서 그런거 같은데..
: : 여러곳에서 초기화를 시켜줘도 계속 그러네요..
: :
: : 어느부분에 이상이 있는건가요?
: :
: : void __fastcall TForm1::Comm1RxChar(TObject *Sender, DWORD Count)
: : {
: :
: :         char str[500];
: :         unsigned char buffer=0;
: :         DWORD i,j;
: :         int k;
: :         char Buff[100];
: :         static unsigned char data[200],serial_number = 0;
: :         static unsigned char serial_data[500];
: :         String *Str_Data =new String;
: :         Comm1->Read(serial_data,Count);
: :
: :         for(i=0;i<Count;i++)
: :         {
: :                 data[serial_number] =   serial_data[i] ;
: :
: :                 if(memicmp(data,"Hello"sizeof("Hello") ) == 0)
: :                 {
: :                         memcpy(Buff, "Hi",sizeof("\n\r"));
: :                         k = Comm1->Write(Buff,sizeof("Hi"));
: :                         memset(Buff,0,100);
: :                 }
: :
: :                 else if(memicmp(data,"Enter user name: ",sizeof("Enter user name: ") ) == 0)
: :                 {
: :                         Label5->Caption = "OK";
: :                         memcpy(Buff, "Korea\n\r",sizeof("Korea\n\r"));
: :                         k = Comm1->Write(Buff,sizeof("Korea\n\r"));
: :                         memset(Buff,0,100);
: :                 }
: :
: :                 else if(memicmp(data,"Enter login password: ",sizeof("Enter login password") ) == 0)
: :                 {
: :                         memcpy(Buff, "Seoul\n\r",sizeof("Seoul\n\r"));
: :                         k = Comm1->Write(Buff,sizeof("Seoul\n\r"));
: :                         memset(Buff,0,100);
: :                 }
: :
: :                 if( data[serial_number] == 0x0d )
: :                 {
: :
: :                         if( (data[0] != 0x1b) && (data[1] != 0x1b) )
: :                         {
: :                         *Str_Data = (char)data[0];
: :                         for(j=1;j<serial_number  ;j++)
: :                         {
: :                                 *Str_Data = *Str_Data + (char)(data[j]);
: :                         }
: :
: :                         Memo1->Lines->Add(*Str_Data )  ;
: :                         while(Memo1->Lines->Count>50)
: :                         Memo1->Lines->Delete(0);
: :                         Memo1->Perform(EM_LINESCROLL,0,Memo1->Lines->Count-1);
: :                         Memo1->SelStart=Memo1->Text.Length()-1;
: :
: :                         Memo1->SelLength=1;
: :                         }
: :                         serial_number = 0;
: :                 }
: :                 else
: :                 {
: :                         serial_number++ ;
: :                 }
: :
: :         }
: : }

+ -

관련 글 리스트
54059 맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요. 번외편 1043 2008/07/23
54074     Re:맨날 질문만 올립니다;; com port에서 특정 데이터가 들어오면 리턴 해주는 부분인데요. 조각발 1052 2008/07/24
54077         감사합니다. 하지만... 번외편 1292 2008/07/24
54078             strcmp로는 안되겠군여 ㅎㅎ ㅠㅠ;; 데이터 크기 비교였네요 번외편 1211 2008/07/24
54061     Re:맨날 질문만 올립니다 JBMEX 928 2008/07/23
54062         제 소스를 보시면... 번외편 1047 2008/07/23
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.