한국어
|
English
제품소개
솔 루 션
응용분야
고객센터
다운로드
제품구매
회사소개
고객센터
>
기술지원
질문&답변 게시판
/ 기술지원
이름
이메일
업체명
연락처
제목
내용
안녕하세요. 솔내시스템 기술지원팀입니다. 일단 구성이 CSE-H53 여러대와 PC 여러대 인 것 같고 항상 같은 제품, 같은 PC가 연결하는 것은 아닌 것 같아 보입니다. PC와 제품은 같은 로컬에서 통신을 할 경우에 항상 IP주소 대역을 맞춰 줘야만 통신이 가능합니다. 따라서 PC의 IP의 변경을 원치 않으시면 제품의 IP 주소를 PC 네트워크 환경에 맞추어 주시면 됩니다. 하지만 PC의 환경을 캐치해서 자동으로 셋팅 값을 제품이 저장 할 수는 없습니다. 자세한 문의는 솔내시스템 기술지원팀으로 연락 주시기 바랍니다. 기술지원팀 : 032 - 245 - 2328 감사합니다. > Anonymous wrote: > ------------------------------------ > 답변 감사 드립니다. > > > 추가 질문 드립니다. > 저희가 구상하는 시스템은 PC가 고정된 것이 아니고 > CSE-H53과 연결하는 PC가 여러 대 입니다. > > 즉 이 장비들은 자동차 마다 들어가 있고 > 그 자동차와 연결 하는 PC는 랜덤하게 있습니다.(각 경찰서 등) > > 아래 말씀해주신 것은 각 PC마다 DDNS의 기능을 이용 하기 위하여 > 프로그램을 설치 해야 하는데.. 이건 좀 여건상 어려워 보입니다. > > PC는 평상시는 인터넷등을 사용 하다가 > 어떤 상황이 되면 PC에 연결되어 있는 인터넷 선을 빼고 > CSE-H53을 연결 하는 것입니다. > 사용 시간은 대략 한시간 정도 입니다. > 이럴경우 > 현재 PC에 셋팅되어 있는 IP(유동이건 고정이건)를 읽어 > CSE-H53을 그에 맞게 셋팅하는 방법은 어떤지요? > > 가능하면 PC의 셋팅값은 수정 하지 않았으면 하는 것 입니다. > 각 SITE의 경찰관들이 이런 부분을 쉽게 이해 못할 수도 있고 > PC프로그램에서 자동으로 PC의 IP등을 변경 한다고 해도, > 새로 복구 하기전에 예기치 않은 일로 복구를 못 한다면 > 인터넷이 안될 수도 있고 해서요 > > > 관련 하여 좋은 아이디어 있으시면 알려주시면 감사 하겠습니다. > 그럼 수고 하세요 > > > > 솔내시스템(주) wrote: > > ------------------------------------ > > DDNS 기능을 이용하면 IP가 유동이어도 접속 할 수있습니다. 아래 링크 참조하세요. > > > > http://www.eztcp.com/kr/support/view.php?page=1&cid=209 > > > > http://blog.eztcp.com/sollae/entry/DynDNS를-이용하여-ezTCP의-DDNS기능을-써보자?category=0 > > > > 다만 접속 할 포트 등이 바뀐다면 제품을 수동으로 바꿔주셔야 합니다. > > > > 감사합니다. > > > > > Anonymous wrote: > > > ------------------------------------ > > > 답변 감사 드립니다. > > > > > > 많은 부분 궁금한점이 해소 되었습니다. > > > 좀더 공부를 해야겠네요.. > > > > > > 한가지 더 질문 드리면, > > > 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 > > > > > > > }
비밀번호
첨부파일
(2MB이하의 이미지, ZIP파일만 가능함)
기재하신 개인 정보는 문의내용에 대한 확인 및 신속하고 정확한 상담을 위해 수집 및 이용하고 있습니다.
기술 지원 외의 다른 목적으로 사용되지 않습니다. 위 개인정보 수집 및 이용에 동의합니다.
동의함
동의안함
공지사항
기술지원
자주 묻는 질문들
질문&답변 게시판
원격지원
고객지원
고객 맞춤 코딩 서비스 신청
A/S 및 수리신청
15일 대여신청
기술자료 요청
견적서 신청