我已经成功发送了多部分pdu短信,
问题是当我尝试将此短信发送到不同网络上的号码时,它会给我以下错误:
+CMGS ERROR:500
任何人都可以告诉我该怎么办。
atCommandStr = "AT+CMGF=0\r";
comPort.WriteLine(atCommandStr + (char)13);
Console.WriteLine(comPort.ReadExisting());
Thread.Sleep(2000);
for (int i = 0; i < number_of_parts; i++)
{
int oct = (messagesParts[i].ToCharArray().Count() / 2) -1;
atCommandStr = "AT+CMGS=" + oct + "\r";
comPort.WriteLine(atCommandStr + (char)13);
Console.WriteLine(comPort.ReadExisting());
Thread.Sleep(2000);
string path;
path = messagesParts[i] + Char.ConvertFromUtf32(26);
comPort.WriteLine(path + (char)13);
for (int a = 0; a < 100; a++)
{
Thread.Sleep(2000);
string t = comPort.ReadExisting();
Console.WriteLine(t);
if (t != "" && t.Contains("CMGS") || t.Contains("ERROR"))
{
break;
}
}
//Console.WriteLine(comPort.ReadExisting());
}
答案 0 :(得分:0)
调制解调器真的返回+CMGS ERROR:500
而不是+CMS ERROR: 500
吗?因为在这种情况下,您的调制解调器不符合指定if sending fails: +CMS ERROR: <err>
的{{3}}标准。
错误代码500表示unknown error
,因此无济于事。但我猜你的长度计算是错误的。从标准:
<length> must indicate the number of octets coded in the TP layer data unit
to be given (i.e. SMSC address octets are excluded).
除以2后减去1是否正确?尝试准确解码将在TP层上发送的内容。尝试增加/减少一点长度,看看它是否有任何区别。
此外,由于atCommandStr已包含\r
,因此您不应将+ (char)13
包含在
comPort.WriteLine(atCommandStr + (char)13);