我正在尝试通过 GSM 模块运行 USSD 代码来获取 SIM 卡余额。我正在使用 GsmComm 库,ASP.NET Web Form 和 C#。以下是我的代码:
public string SendUssdRequest2(string request)
{
comm = ConnectAndGetComm();
string data = TextDataConverter.StringTo7Bit(request);
string msg = "";
var asPDUencoded = Calc.IntToHex(TextDataConverter.SeptetsToOctetsInt(data));
try
{
IProtocol protocol = comm.GetProtocol();
string gottenString = protocol.ExecAndReceiveMultiple("AT+CUSD=1," + asPDUencoded + ",15");
var re = new Regex("\".*?\"");
int i = 0;
if (!re.IsMatch(gottenString))
{
do
{
protocol.Receive(out gottenString);
++i;
} while (!(i >= 5
|| re.IsMatch(gottenString)
|| gottenString.Contains("\r\nOK")
|| gottenString.Contains("\r\nERROR")
|| gottenString.Contains("\r\nDONE")));
}
string m = re.Match(gottenString).Value.Trim('"');
return PduParts.Decode7BitText(Calc.HexToInt(m));
}
catch(Exception e)
{
msg = e.Message;
}
finally
{
comm.ReleaseProtocol();
}
return msg;
}
我进行了调试,并发现调制解调器已连接。在“ExecAndReceiveMultiple”中,等待29999/30030毫秒后未从电话接收到数据而出现错误。 代码是否正确?可能的问题是什么?有任何其他建议,如使用其他库或代码来获取SIM余额将会给予很大帮助。谢谢。
DONE
不是一个有效的最终结果代码,不应该进行检查。除了OK和ERROR之外,还存在更多的最终结果代码,因此您必须检查所有代码。此外,您应该更改串行输入处理以进行适当的框架处理。 - hlovdal