2012-02-23 92 views
1

我一直在使用scampers庫通過GSM調制解調器發送和接收短信。它的工作方式非常符合我的要求。但我堅持的問題是我不能發出像* 101#或類似命令,經過一番研究,我發現這些命令被稱爲USSD命令。所以我的問題是,有沒有人能夠通過Scampers庫發佈USSD命令。GsmComm USSD命令

回答

6

USSD是與SMS不同的協議,因此您不能使用SMS中心庫發送USMD消息。這就像試圖從一個ftp客戶端庫發送http請求一樣。

+0

謝謝,你知道發行USSD命令的任何例子? – crypted 2012-02-27 08:54:37

+1

下面是一個使用SMSLib for .net的示例(希望這是您想要的)http://groups.google.com/group/smslib-dotnet/browse_thread/thread/45791e96206aa22d http://smslib.org/doc/smslib/dotnet/ – linkerro 2012-02-27 11:59:56

+0

謝謝,它像一個魅力:)工作!授予您+100:D – crypted 2012-02-28 10:03:22

3

這個工作很好地爲我用GsmComm:

public string SendUssdRequest(string request) 
    { 
     string data = TextDataConverter.StringTo7Bit(request); 

     var asPDUencoded = Calc.IntToHex(TextDataConverter.SeptetsToOctetsInt(data)); 
     try 
     { 
      IProtocol protocol = _comm.GetProtocol(); 
      string gottenString = protocol.ExecAndReceiveMultiple("AT+CUSD=1," + asPDUencoded + ",15"); 
      var re = new Regex("\".*?\""); 
      int i = 0; 
      if (!re.IsMatch(gottenString)) 
      { 
       do 
       { 
        protocol.Receive(out gottenString); 
        ++i; 
       } while (!(i >= 5 
          || re.IsMatch(gottenString) 
          || gottenString.Contains("\r\nOK") 
          || gottenString.Contains("\r\nERROR") 
          || gottenString.Contains("\r\nDONE"))); //additional tests "just in case" 
      } 
      string m = re.Match(gottenString).Value.Trim('"'); 
      return PduParts.Decode7BitText(Calc.HexToInt(m)); 
     } 
     catch { } 
     finally 
     { 
      _comm.ReleaseProtocol(); 
     } 
     return ""; 
    } 
+0

如何找到_comm的端口號,並且如果我通過GsmComm.defaultportnumber設置了默認端口號,那麼我只收到異常「通信線程未運行」。 – AT07 2015-07-02 08:33:01

+0

'_comm'的類型是什麼? – th1rdey3 2015-07-27 04:17:30

0

_comm的類型是GsmCommMain

using GsmComm.GsmCommunication; 
using GsmComm.PduConverter; 
using GsmComm.PduConverter.SmartMessaging; 

GsmCommMain _comm; 
+0

你應該發表評論,而不只是簡單的代碼,以便作出正確的回答。 – filipst 2017-05-18 13:47:00