Создайте составленное SMS UDH и добавьте его к тексту сообщения. - PullRequest
4 голосов
/ 14 августа 2010

Чтобы отправить SMS (7-битное) длиннее 160 символов, вам нужно разбить сообщение на 153-символьные части данных сообщения и поставить перед каждой из них 5-октетный UDH (заголовок пользовательских данных), пояснив являются частями составного SMS и должны быть «собраны» принимающим устройством.

Поскольку UDH отправляется как часть данных сообщения, любая служба, через которую я его отправляю, должна, будем надеяться, игнорировать ее и отправлять на телефон получателя, который будет декодировать его и объединять части длинного SMS.

Я использую следующий тестовый код, но получаю два отдельных сообщения. Любые предложения относительно того, что я делаю неправильно?

private void sendButton_Click(object sender, EventArgs e)
{
    if ((cellNumberText.Text.Trim().Length == 10) && (messageText.Text.Trim().Length > 0))
    {
        SendSms(cellNumberText.Text.Trim(), BuildUdh(255, 2, 1) + "Hello first time.  ");
        SendSms(cellNumberText.Text.Trim(), BuildUdh(255, 2, 2) + "Hello second time.  ");
    }
}

private string BuildUdh(byte messageId, byte partCount, byte partId)
{
    var udg = new byte[5];
    udg[0] = 0x00;
    udg[1] = 0x03;
    udg[2] = messageId;
    udg[3] = partCount;
    udg[4] = partId;

    return BitConverter.ToString(udg);

1 Ответ

4 голосов
/ 18 августа 2010

Зависит от услуги, которую вы используете для отправки SMS.В большинстве контент-интерфейсов (например, SMPP или EMI / UCP) к SMSC вы можете использовать описанную выше методику, но вы должны указать, что отправляемое SMS содержит заголовок пользовательских данных.

Помимо функции BuildUdhправильно построить информационный элемент Concat, но в первом байте отсутствует общая длина UDH.

private string BuildUdh(byte messageId, byte partCount, byte partId)
{
    var udg = new byte[6];
    udg[0] = 0x05;      // Overall length of UDH
    udg[1] = 0x00;      // IE Concat 
    udg[2] = 0x03;      // IE parameter Length
    udg[3] = messageId;
    udg[4] = partCount;
    udg[5] = partId;
[..]

Если вы используете мобильный телефон и его интерфейс AT + C для отправки SMS, выВы должны выполнить битовую вставку самостоятельно и передать PDU с набором UDHI и 140 байтами данных.

hth, cheerio Steve

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...