한국어 English Chinese Russian

질문&답변 게시판 / 기술지원



SSL 암호화로 사용자의 입력정보가 보호되고 있습니다.
No. 854 Re: Re: Re: Re: CSE-H53 SW관련 질문건 2011-02-24

답변 감사 드립니다.

많은 부분 궁금한점이 해소 되었습니다.
좀더 공부를 해야겠네요..

한가지 더 질문 드리면,
PC상에 IP등이 고정이든 가변이든 PC의 값을 수정 하지 않고
PC의 값에 맞게 CSE-H53을 자동으로 다시 셋팅 해서
처리가 가능 할까요?



그럼 수고 하세요



> 솔내시스템(주) wrote:
> ------------------------------------
> 1. 언제 "DlgOnReceive" 이 함수가 호출 되는지요?
> -> 윈도우 소켓이 데이터를 받으면 호출됩니다.
> void CEzSock::OnReceive(int nErrorCode) 여기에서 호출합니다.
> 위의 함수는 CAsyncSocket의 OnReceive 함수를 오버라이딩 했습니다.
>
> 2. len = m_socket.Receive(buf2, UART_MAX_CNT, 0);
> 에서 len은 어떻게 결정 되는지요?
> -> http://msdn.microsoft.com/en-us/library/ct7d990b(v=VS.80).aspx
> 위 MSDN에 보면 자세히 나와있는데 간략히 설명하겠습니다.
> 통신 에러가 발생하지 않았다면 받은 데이터 길이를 리턴합니다.
> 0인경우는 연결이 해제 된것이고 -1이면 에러가 발생한 것입니다.
> 참고로 len > buf2 이면 데이터 유실 됩니다.
>
> 3. len = m_socket.Receive(buf2, UART_MAX_CNT, 0);
> 이 코드 아래에서 buf2의 데이터를 카피하거나 참조 하고 있을때
> 새로이 들어 오는 데이터와 충돌이 나지는 않는지요?
> ->Receive 함수를 호출하여 데이터를 가져오면 가져온 데이터는 삭제됩니다.
> 2번 연속으로 해보시면 확인 할 수 있습니다.
> 그렇기때문에 새로 들어오는 데이터와 충돌은 나지 않는다고 생각합니다.
>
> 4. 현재 생태를 보면 40KB의 데이터가 오는 중간에 "DlgOnReceive" 함수에서
> 제가 buf2안의 데이터를 어세스 하는데,
> 이런 것이 데이터 깨짐과 관계가 있을까요?
> -> 상관 없다고 생각됩니다.
> 개인적인 생각으로는 우선 받은 데이터를 모두 출력해보시고 출력된 데이터가 깨졌으면
> 전송하는 곳에서 데이터를 잘못보내는 것이 아닌가 의심하시고
> 모든 데이터가 정상적으로 출력이 됐다면 데이터 파싱하는 곳을 의심해보면 될 것 같습니다.
>
> 5. "DlgOnReceive"이 함수를 좀더 효율적으로 쓸수 있는 방법을 찾고 있습니다.
> -> 개인적인 생각으로는 전송하는 곳에서 전송할 한 주기 데이터 크기를 처음에 같이 보내서
> 수신하는 곳에서 for문으로 플래그를 찾지 않고 받을 크기를 가지고 처리하면
> 좀더 빠른 처리가 가능하다고 생각합니다.
>
> 감사합니다.
>
> > Anonymous wrote:
> > ------------------------------------
> > 파일은 잘 받았습니다.
> >
> > 다만 제가 원하는 것은 어느부분의 데이터가 깨지는지를 확인 하는 것이 아닙니다.
> >
> >
> > 구체적으로 질문 드리면..
> > 1. 언제 "DlgOnReceive" 이 함수가 호출 되는지요?
> > 2. len = m_socket.Receive(buf2, UART_MAX_CNT, 0);
> > 에서 len은 어떻게 결정 되는지요?
> > 3. len = m_socket.Receive(buf2, UART_MAX_CNT, 0);
> > 이 코드 아래에서 buf2의 데이터를 카피하거나 참조 하고 있을때
> > 새로이 들어 오는 데이터와 충돌이 나지는 않는지요?
> > 4. 현재 생태를 보면 40KB의 데이터가 오는 중간에 "DlgOnReceive" 함수에서
> > 제가 buf2안의 데이터를 어세스 하는데,
> > 이런 것이 데이터 깨짐과 관계가 있을까요?
> > 5. "DlgOnReceive"이 함수를 좀더 효율적으로 쓸수 있는 방법을 찾고 있습니다.
> >
> >
> > 제가 PC 프로그램을 잘 몰라 좀 무리한 질문을 드리는지도 모르겠습니다.
> > 모쪼록 너그러이 봐주세요
> >
> > 그럼 수고 하세요
> >
> >
> >
> >
> > > 솔내시스템(주) wrote:
> > > ------------------------------------
> > > 안녕하세요. 솔내시스템입니다.
> > >
> > > 첨부 파일을 보시면 클라이언트 샘플인 것을 확인 하실 수 있습니다.
> > >
> > > Dump2Notepad 함수를 이용하면 메모장에 데이터를 출력 할 수 있습니다.
> > >
> > > Receive 함수를 보시면 Dump2Notepad 함수를 호출하여 받은 데이터를 출력합니다.
> > >
> > > 첨부 파일을 참고하셔서 데이터를 메모장에 출력해보면서
> > >
> > > 어느 부분에서 깨지는지 확인 하시면 될 것 같습니다.
> > >
> > > 감사합니다.
> > >
> > > > Anonymous wrote:
> > > > ------------------------------------
> > > > 안녕 하세요
> > > > CSE-H53과 t2s_vc.zip를 다운받아 테스트 중입니다.
> > > >
> > > > 저희 프로젝트의 구성도는
> > > > SET==(UART)==CSEH53==(LAN)==PC
> > > > 이렇게 되어 있습니다.
> > > > SET에서 PC로 전송 되는 DATA가 40KB 정도씩 됩니다.
> > > > PC에서 셋트로 전송 되는 데이터는 20BYTE정도 입니다.
> > > >
> > > >
> > > > 질문 드립니다.
> > > > 코드를 보면 "DlgOnReceive(int nErrorCode)" 함수 안에서 데이터를 받는데,
> > > > 40KB를 연속으로 데이터를 보낼 경우 자주 데이터가 깨집니다.
> > > > 코드는 아래에 있습니다.
> > > > 좀더 효율적으로 사용할 방법이 있는지요?
> > > >
> > > > 코드에 문제점이 있는지 검토 부탁 드립니다.
> > > > 그럼 수고 하세요
> > > >
> > > >
> > > > =========== 아 래 =====================
> > > > void Ct2s_vs2008Dlg::DlgOnReceive(int nErrorCode)
> > > > {
> > > > int len,count;
> > > > CString msg;
> > > > //BYTE buf[1024];
> > > > unsigned char buf2[UART_MAX_CNT];
> > > >
> > > > len = m_socket.Receive(buf2, UART_MAX_CNT, 0);
> > > > #if 0
> > > > for(count = 0; count < len; count++)
> > > > {
> > > > msg = buf2[count];
> > > > //m_console.ReplaceSel(msg);
> > > > }
> > > > #else
> > > > count = 0;
> > > > if (FindStartFlag==0)
> > > > {
> > > > for(count = 0; count < len; count++)
> > > > {
> > > > //msg = char(buf2[count]);
> > > > //m_console.ReplaceSel(msg);
> > > >
> > > > if (buf2[count]==BK_UART_SB)
> > > > {
> > > > W_point = 0;
> > > > FindStartFlag = 1;
> > > >
> > > > //memcpy (buf,&(buf2[len-count]),len-count);
> > > > memcpy (&(uart_R_data[W_index][W_point]),&(buf2[count]),len-count);
> > > > W_point += (len-count);
> > > >
> > > > break;
> > > > }
> > > > }
> > > > }
> > > > else
> > > > {
> > > > memcpy (&(uart_R_data[W_index][W_point]),buf2,len);
> > > > W_point += len;
> > > > if (uart_R_data[W_index][W_point-1]==BK_UART_EB)
> > > > {
> > > > length = (uart_R_data[W_index][2]<<24)|(uart_R_data[W_index][3]<<16)|(uart_R_data[W_index][4]<<8)|(uart_R_data[W_index][5]);
> > > > FindStartFlag = 0;
> > > > // 이 부분에서 코드를 비교해보면 데이터가 깨진경우가 발생 합니다.
> > > > }
> > > > }
> > > > #endif
> > > > }

글쓴이 Anonymous 업체명


NO Subject Name Date Read
850 CSE-H53 SW관련 질문건 Anonymous 2011-02-23 4243
851 Re: CSE-H53 SW관련 질문건 솔내시스템(주) 2011-02-24 4186
852 Re: Re: CSE-H53 SW관련 질문건 Anonymous 2011-02-24 4079
853 Re: Re: Re: CSE-H53 SW관련 질문건 솔내시스템(주) 2011-02-24 4300
854 Re: Re: Re: Re: CSE-H53 SW관련 질문건 Anonymous 2011-02-24 4285
855 Re: Re: Re: Re: Re: CSE-H53 SW관련 질문건 솔내시스템(주) 2011-02-25 4386
856 Re: Re: Re: Re: Re: Re: CSE-H53 SW관련 질문건 Anonymous 2011-02-28 4093
857 Re: Re: Re: Re: Re: Re: Re: CSE-H53 SW관련 질문건 솔내시스템(주) 2011-02-28 4178