Я послал команду USSD, используя этот код:Как получить ответный результат при отправке команд USSD в C#?
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», но когда я отправлю эту команду собственным приложением модема, вы получите правильный ответ от оператора, это означает, что моя команда отправки в порядке, но это приложение получает ответ, но я получаю половину.
У вас есть решение? Im, сталкивающееся с той же проблемой. –
Это связано с тем, что код сначала получает ответ модема (это нормально), и через небольшой промежуток времени получает ответ сети (который является фактическим балансовым сообщением) –