Я отправил 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", но когда я отправляю эту команду собственным приложением модема, получаю правильный ответ от оператора, это означает, что моя отправляющая команда в порядке, но это приложение получает весь ответ, а я получаю половину.