2012-08-28 172 views
2

我正在USSD客户端上工作。除了关闭遥远的USSD会话之外,一切正常。关闭远程USSD会话

在规范中,我们可以看到函数CUSD: AT + CUSD = 2应该关闭USSD会话,但事实并非如此。

事实上,当我做这个顺序:

AT+CUSD='#xxx#',12 
AT+CUSD='1',12 

我有一个开放的遥远的连接。 在您的手机,您可以通过拨打#XXX *#

如果我将打开一个新的会话:

AT+CUSD='#xxx*#',12 

这不是打开一个新的会话遥远。 如果我发送:

AT+CUSD=2 
AT+CUSD='#xxx#' 

这不是开启一个新的遥远的会议。

你知道如何关闭遥远的会话吗? 我在windows或Linux上使用huwaei key E160和E173。

+0

你指的是哪一个规范? ETSI规格或华为手册? 'AT + CUSD = 2'是关闭USSD会话的正确命令。请注意,每个会话都有一个时间限制,您可能希望在发出关闭会话命令后添加延迟。发送代码以启动会话时,* DCS *可能受调制解调器的限制,有些可能只接受特定的值。根据我的经验,它可以是'0'或'15'(来自* Siemens *和* ZTE *调制解调器)。另外,如果信号强度太低,可能会导致会话状态不稳定。所以建议启用结果代码。 – Jay

+0

谢谢你的帮助。我使用ETSI规格。事实上,我认为你在这一点上是正确的:它应该是USSD服务器上每个会话或USSD密钥之间的时间限制。我将在华为手册中检查这一点。谢谢! – Julio

回答

0

以如下方式使用。 AT + CUSD = '#XXX#',15 AT + CUSD = 2

0

我张贴这一点,因为这是关于终止使用AT命令USSD会话,还因为答案是模糊的顶部结果。 这是我在最后使用的c#代码(我正在向gsm调制解调器发送命令)。希望它可以帮助别人

SerialPort SendingPort=null; 

    public string TerminateUssdSession() 
    { 
      InitializePort(); 

      //// generate terminate command for modem 
      string cmd = ""; 
      cmd = "AT+CUSD=2\r"; 

      // send cmd to modem 
      OpenPort(); 

      SendingPort.Write(cmd); 

      Thread.Sleep(500); 

      string response = SendingPort.ReadExisting(); 

      return response; 

    } 

    private void InitializePort() 
    { 
     if (SendingPort == null) 
     { 
      SendingPort = new SerialPort(); 
      SendingPort.PortName = PortName;//put portname here e.g COM5 
      SendingPort.BaudRate = "112500"; 
      SendingPort.Parity = Parity.None; 
      SendingPort.DataBits = 8; 
      SendingPort.StopBits = StopBits.One; 
      SendingPort.Handshake = Handshake.None; 
      SendingPort.ReadTimeout = 500; 
     } 
    } 

    private void OpenPort() 
    { 
     if (!SendingPort.IsOpen) 
     { 
      SendingPort.Open(); 
     } 
    }