如何在c#中发送USSD命令时检索响应结果? [英] How to retrieve response result in sending USSD commands in c#?

查看:61
本文介绍了如何在c#中发送USSD命令时检索响应结果?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我使用以下代码发送了USSD命令:



I sent USSD command using this code:

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
    }



为什么只检索确定在结果?



在这种情况下,我想要检索我的余额,我必须收到这样的答案:你的余额是100美元......但只是检索: AT + CUSD = 1,\* 140 * 1#\\\\\\\\\\\\\ n但是当我通过调制解调器自己的应用程序发送此命令时,请从运营商处检索正确的响应意味着我的发送命令是正常但该应用程序收到所有答案,但我收到一半。


Why just retrieve OK in result?

in this case i want to retrieve my balance and i must receive answer like this: "your balance is 100$..." but just retrieve: "AT+CUSD=1,\"*140*1#\"\r\n\OK\r\n" but when i send this command by modem's own application retrieve correct response from operator this means my sending command is OK but that application receive all answer but i receive half.

推荐答案

...但只是检索:AT + CUSD = 1,\\ \\* 140 * 1#\\\\\\\\\\\\但是当我通过调制解调器自己的应用程序发送此命令时,从运营商处检索到正确的响应,这意味着我的发送命令没问题,但是申请收到所有答案,但我收到一半。
..." but just retrieve: "AT+CUSD=1,\"*140*1#\"\r\n\OK\r\n" but when i send this command by modem's own application retrieve correct response from operator this means my sending command is OK but that application receive all answer but i receive half.


大卫你好,



最后加15,



例如:AT + CUSD = 1,\* 140 * 1#\+,15 \\ n



希望你觉得这个答案很有帮助



问候
Hello David,

Add ,15 at the end

eg: "AT+CUSD=1,\"*140*1#\"" + ",15\r\n"

Hope u find this answer helpful

Regards


这可能对你有帮助

< a href =http://www.experts-exchange.com/questions/23017550/AT-COMMAND-GSM-Modem-using-USSD-Vbscript.html> vb USSD代码发送



u可以复制URL http://www.experts-exchange.com/questions/23017550/AT-COMMAND-GSM-Modem-using-USSD-Vbscript.html

this might help you
vb USSD code sending
or
u can copy URL http://www.experts-exchange.com/questions/23017550/AT-COMMAND-GSM-Modem-using-USSD-Vbscript.html
<br />
vance<br />
Sub USSD()<br />
Set MSComm1=CreateObject("MSCOMMLib.MSComm")<br />
MSComm1.Settings = "9600,n<br />
MSComm1.InputLen = 0<br />
MSComm1.RThreshold = 5<br />
MSComm1.CommPort = 4<br />
MSComm1.InBufferCount = 0<br />
MSComm1.PortOpen = True<br />
MSComm1.Output="AT+CMGF=1"<br />
WScript.Sleep(1000) TextCommand = "*124#" strCommand = "AT+CUSD=1," & Chr(34) & TextCommand & Chr(34) & ",15"     MSComm1.Output=strCommand     WScript.Sleep(10000)     strResponse=MSComm1.Input     If (InStr(strResponse, "OK") > 0) Then ' Re MSComm1.Output=" "<br />
WScript.Sleep(10000)<br />
strResponse2=MSComm1.Input<br />
If (InStr(strResponse2, "+CUSD:") > 0) Then          ' If USSD response             strFields = Split(strResponse2, Chr(34))             modemReply = strFields(<br />
Else<br />
    modemReply = "Error st End If ELSE <br />
modemReply = "Error st<br />
End if <br />
MSComm1.PortOpen = False <br />
set MSComm1=nothing<br />
 End Sub <br />
Call USSD() <br />
msgbox modemReply<br />



有一些错误但是你可以解决它们,我只是通过手机发送电话dnt在剪贴板中保存那么多复制的数据并返回选项卡


there are some mistakes but u can fix them, i just sent that thru a phone en phone dnt hold that much copied data in the clipboard with tabs en returns


这篇关于如何在c#中发送USSD命令时检索响应结果?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆