2017-12-01 33 views
1

GSM 장치/모뎀을 사용하여 메시지를 보내고 받기 위해 C# .Net을 사용하는 기존 데스크톱 응용 프로그램이 있습니다. 모든 것이 정상이지만 지금은 몇 가지 문제에 직면하고 있습니다.AT 명령을 사용하여 GSM 장치에서 유니 코드 메시지를 보내는 방법

1 - 메시지에 160자를 초과하여 보낼 수 없습니다.

2 - 유니 코드 메시지를 보낼 수 없습니다 (제 언어는 벵골어입니다). 나는 이미 16 진수로 변환하려했지만 다른 언어를 보내고있다.

이것은 내가 지금까지 시도한 것입니다 : 모든

port.WriteLine("AT+CSCS=\"UCS2\"\n"); 
Thread.Sleep(100); 
port.WriteLine("AT+CMGF=1"+Environment.NewLine); 
Thread.Sleep(100); 
port.WriteLine("AT+CMGS=\""+number+"\""); 
Thread.Sleep(100); 
port.WriteLine(message+char.ConvertFromUtf32(26)+Environment.NewLine); 
Thread.Sleep(100); 
port.Write(new byte[]{26},0,1); 
Thread.Sleep(100); 

답변

0

첫째, 당신은 never, never, never, never, never, never, never, never, never, never, ever use Thread.Sleep like that한다! 또한 AT+CMGS의 경우 모뎀에서 수신 준비 페이로드 응답을 제대로 기다려야합니다 (this answer의 첫 번째 부분 참조).


SMS 크기와 관련하여 160 문자는 GSM 네트워크의 제한 사항입니다. 텍스트를 분할하고 수신하는 휴대폰에 투명하게 연결된 여러 메시지를 보내 "단일"메시지처럼 보이도록 "가상으로"더 큰 메시지를 보낼 수 있습니다. 이를 multi-part sms이라고합니다.

텍스트 모드로 여러 부분 메시지를 보낼 수 없으므로 PDU 모드를 사용해야합니다.


당신은 모든 단일 문자열 매개 변수 switching to a different character encoding with AT+CSCS 포함, 그때부터 그런 식으로 인코딩해야 AT+CSCS="UCS2"를 실행 한 후. 귀하의 경우 이것은 <da> 인수에 AT+CMGS에 적용됩니다.