C# GsmComm USSD命令

C# GsmComm USSD命令,c#,gsm,ussd,C#,Gsm,Ussd,我一直在使用图书馆发送和接收短信通过GSM调制解调器。它正按照我想要的方式工作。但我遇到的问题是,我不能发出类似*101或类似的命令,在做了一些研究后,我发现这些命令被称为USSD命令。所以我的问题是,有人能通过图书馆发出USSD命令吗 USSD是一种与SMS不同的协议,因此您不能使用以SMS为中心的库来发送USMD消息。这就像试图从ftp客户端库发送http请求。USSD是一种与SMS不同的协议,因此您不能使用以SMS为中心的库发送USMD消息。这就像尝试从ftp客户端库发送http请求一样。

我一直在使用图书馆发送和接收短信通过GSM调制解调器。它正按照我想要的方式工作。但我遇到的问题是,我不能发出类似*101或类似的命令,在做了一些研究后,我发现这些命令被称为USSD命令。所以我的问题是,有人能通过图书馆发出USSD命令吗

USSD是一种与SMS不同的协议,因此您不能使用以SMS为中心的库来发送USMD消息。这就像试图从ftp客户端库发送http请求。

USSD是一种与SMS不同的协议,因此您不能使用以SMS为中心的库发送USMD消息。这就像尝试从ftp客户端库发送http请求一样。

这对我使用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 "";
    }

这对我使用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 "";
    }

_comm的类型是GSMComm

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

GsmCommMain _comm;

_comm的类型是GSMComm

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

GsmCommMain _comm;

下面是一个使用SMSLib for.net hope的示例,这正是您想要的@LinkedError,组链接似乎已断开。你能提供其他参考吗?下面是一个使用SMSLib for.net的示例,希望这就是你想要的@linkerro,组链接似乎已断开。你能提供任何其他参考吗?我如何找到_comm的端口号?如果我通过GsmComm.defaultportnumber设置默认端口号,那么我只收到了通信线程未运行的异常。什么是_comm的类型?嗨,当我使用你的代码时,我得到这个异常:消息=移动设备错误50发生。有什么问题吗?我想您在发送请求之前更改了_comm对象的一些设置。我如何找到_comm的端口号?如果我通过GsmComm.defaultportnumber设置了默认端口号,那么我只收到异常通信线程未运行。什么类型的_comm?您好,当我使用你的代码,我得到这个例外:消息=移动设备错误50发生。有什么问题吗?我认为在发送请求之前,您应该更改_commobject的一些设置。您应该发表评论,而不仅仅是普通代码,才能做出好的回答。您应该发表评论,而不仅仅是普通代码,才能做出好的回答。