我使用以下代码发送了USSD命令:
SerialPort port = new SerialPort();
port.BaudRate = 921600;
port.PortName = "COM16";
port.Parity = Parity.None;
port.DataBits = 8;
port.StopBits = StopBits.One;
port.ReadTimeout = 3000;
port.WriteTimeout = 3000;
port.DataReceived += port_DataReceived;
port.Open();
port.Write("AT+CUSD=1,\"*140*1#\"" + "\r\n");
void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
SerialPort spL = (SerialPort)sender;
byte[] buf = new byte[spL.BytesToRead];
spL.Read(buf, 0, buf.Length);
foreach (Byte b in buf)
{
message += b.ToString();
}
var result = Encoding.ASCII.GetString(buf);//just return OK
}
为什么只在结果中检索OK?
在这种情况下,我想要检索我的余额,我必须得到这样的答案:“你的余额是100美元......”但只需检索:“AT + CUSD = 1,\”* 140 * 1#\“ \ r \ n \ OK \ r \ n“但是当我通过调制解调器自己的应用程序发送此命令时,从运营商处检索到正确的响应,这意味着我的发送命令没问题,但该应用程序收到所有答案,但我收到了一半。
答案 0 :(得分:1)
实际上我更新了代码,现在它可以与GSMCOMM库一起使用。我可以查看余额并查看回复。我只是将响应附加到字符串变量,而我仍然收到回复。
public string SendUssdRequest(string request)
{
log.DebugFormat("Sending USSD Request {0}", request);
string result = "";
try
{
IProtocol protocol = comm.GetProtocol();
string gottenString = protocol.ExecAndReceiveMultiple("AT+CUSD=1," + request + ",15");
result = gottenString;
int i = 0;
if (!gottenString.Contains("\r\n+CUSD: 2"))
{
bool receiving = false;
do
{
receiving = protocol.Receive(out gottenString);
result += gottenString;
++i;
} while (receiving);
}
result = result.Replace("\r\n", "");
result = result.Replace("+CUSD: 2,", "");
result = result.Replace(",15", "");
log.DebugFormat("{1} - USSD Response is: {0}", result,SenderNumber);
return result;
}
catch(Exception ex)
{
log.Error(ex);
}
finally
{
comm.ReleaseProtocol();
}
return "";
}
答案 1 :(得分:-1)
在代码末尾
port.Write("AT+CUSD=1,\"*140*1#\"" + ",15\r");