2017-01-02 14 views
0

BGS2-W 모뎀으로 작업하고 있습니다. 모뎀에 AT 명령을 쓰는 C 응용 프로그램이 있습니다. 모뎀의 응답은 \ r \ n OK 또는 \ r \ n \ n과 비슷합니다. 언제든지 \ r 또는 \ n을 수신 할 때 모뎀의 응답이 응답으로 간주됩니다.GSM 모뎀을 통한 이진 파일 다운로드

문제 HTTP GET을 통해 이진 파일을 다운로드하려고하는데 이진 파일에 '\ r'과 '\ n'이 포함될 수 있습니다. 이 모뎀 응답을 구문 분석 할 때 문제가 발생합니다.

누구나이 문제가 발생합니까? 감사.

답변

0

this file 페이지 237에서 뭔가를 발견했습니다. HTTP 다운로드 예제가 있습니다.

응답의 첫 번째 줄에서 AT^SISR = 4, [reqLength]를 사용할 때 데이터 길이가 입니다. 여기에서이 데이터 길이를 사용해야하지만 \ r 또는 \ n은 끝 표시로 사용하지 않아야합니다.

208 페이지에서^SISR에 대한 자세한 설명이 있습니다.

0

\ r 및 \ n은 모뎀 응답으로 고려하지 않아야합니다.이 문자는 바이너리 파일, ASCII 파일 또는 http 메시지의 헤더만으로 합법적 인 데이터 교환이 될 수 있기 때문입니다.
AT + RECV 또는 모뎀에서 데이터를 받기 위해 사용하는 유사한 명령에는 수신 된 데이터의 양을 지정하는 필드가 있어야하며 그런 다음 데이터와 OK 문자열이옵니다.
필드 전체를 구문 분석하는 데 중점을 둡니다. 따라서 예상되는 데이터 내의 특수 문자는 무시됩니다.

1

일반적으로 대부분의 모뎀에는 명령 모드와 데이터 모드 (출처 : https://en.wikipedia.org/wiki/Command_and_Data_modes_(modem))가 있습니다. 호스트가 데이터 모드를 호출하는 명령을 보내면 모뎀은 "CONNECT"응답을 보내고 데이터를 그대로 해석합니다. C 코드를 작성하는 동안 같은 개념을 사용하십시오. 자신 만의 코드를 작성하는 것은 좋지만,이 자료의 대부분을 처리하는 오픈 소스 라이브러리를 찾는 것이 좋습니다.

+0

* "모뎀이 데이터 모드를 사용하려고 할 때 ..."* - 모뎀에 달려 있지 않습니다. 명령 대 데이터 (일명 투명한) 모드는 완전히 호스트의 통제하에 있습니다. 그렇지 않으면 당신의 대답은 3 개의 현재 대답 중 가장 유익한 것입니다. – sawdust

+0

동의 함. 그에 따라 답변을 수정했습니다. – manishg