Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# .NET
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.66/107: Рейтинг темы: голосов - 107, средняя оценка - 4.66
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
1

Отправка длинных SMS в PDU

05.04.2011, 07:52. Просмотров 19346. Ответов 32
Метки нет (Все метки)

Здравствуйте! Вообщем, разбираюсь с отправкой смс... Вроде все понятно, только вопрос: как отсылать длинные смс? Люди добрые, помогите христа ради... Неделю инет рою... Ничего путного нет( Слышал, про UDH... Но че это за шляпа и куда её вставлять... Хз... Руководствовался: http://hardisoft.ru/soft/otpravka-sm...-na-c-chast-1/

Добавлено через 15 часов 42 минуты
Неужели никто не знает?
1
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2011, 07:52
Ответы с готовыми решениями:

Отправка SMS с сайта
Здравствуйте! Нужно создать форму с которой будем отправлять смс с сайта sms.idknet.com Как всё...

Отправка SMS с сайта
Доброе время суток... Прошу помогите, обьясните или покажите... Хочу научится создавать...

Отправка SMS через интернет
здраствуйте, помогите написать програму для отправки смс через интернет! пишу на c# , там нужны...

Отправка SMS через USB-модем
Интересует, можно ли и каким образом реализовать на С# механизм отправки смс через подключенный к...

Отправка sms сообщения через smtp
Как с компьютера отправить SMS сообщение на мобильные устройства ? Какие ресурсы, библиотеки нужны...

32
Leax
188 / 187 / 17
Регистрация: 07.11.2010
Сообщений: 477
05.04.2011, 08:06 2
DeadBoy, длинные смс обычно отсылаются несколькими короткими с автоматической программной разбивкой... (через оператора мобильной связи не перепрыгнешь, имхо)
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
05.04.2011, 10:16  [ТС] 3
Leax, Ну это само собой... Я так покапался, и если правильно, то каждое сообщение будет по 67 символов (вместо 70), если использовать кириллицу... Поэтому в каждый кусок требуется добавлять заголовок UDH... Я даже нашел описание:

UDH представляет из себя следующее:

0x05
0x00
0x03
1 октет - уникальный для данной группы СМС номер
1 октет - количество СМС для склейки
1 октет - порядковый номер СМС

Блин, только куда его вставлять?! И нужна ли задержка между отправкой частей? Блин народ, помогите разобраться... Дело срочное... =/
0
chessman1
166 / 95 / 23
Регистрация: 13.03.2011
Сообщений: 402
05.04.2011, 11:31 4
Я полагаю UDH надо вставлять в голову каждой SMS-ки изменяя только порядковый номер
0
05.04.2011, 11:31
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
06.04.2011, 13:39  [ТС] 5
chessman1, Ну это логично, только если руководствоваться инструкцией http://hardisoft.ru/soft/otpravka-sm...-na-c-chast-1/ где там голова? А какое место вставлять? Все уж через чур размыто... =/

З.Ы. Может кто знает более толковый мануал по отправке или хотя бы формированию PDU?

Добавлено через 3 часа 54 минуты
Урррра! Вашу ж мать! )) Прогресс пошел! Народ, вот нарыл мануал: http://mobiletidings.com/2009/02/18/combining-sms-messages/ Вроде все понял, только не пойму как сосчитать UDL... Я короче пытаюсь подсчитать сколько текста в двухбайтовой кодировке максимум можно впихнуть, но не пайму как там они считают( Посмотрите кто нибудь, и напишите более понятным языком...

Добавлено через 2 минуты
Блин, я знаю что всего 67 русских символов... (6 байт вроде уходят на описание UDH) но блин... Вообщем мосг закипает...

Добавлено через 1 минуту
Аааааа! Я понял!!! )

Добавлено через 1 минуту
Блин в семибайтовой или восьмибайтовой (не помню)) можно отсылать только 140! символов а не 160! Кароче: 6 байт на UDH и 134 на текст сам) Вот вроде))

Добавлено через 3 минуты
Вооооот) Значит в UCS2 (не перепутал вроде) длинна поля UDL будет 6 байт (UDH (5 байт) + UDHL (1 байт)) + количество закодированных символов в UCS2 / 2 (так как в юникоде буква кодируется 2 байтами) Уф)

Добавлено через 1 минуту
Прошу прощения) Просто записать мысли больше некуда) Проверю, отпишусь)) И если получится, напишу подробнейший мануал по отправке смс) Чтобы люди не мудили так как я))

З.Ы. А может, пускай помудят) Это полезно для мозга)

Добавлено через 20 часов 35 минут
В общем... Прочитав мануал из предыдущего поста, получилось отсылать только в семибайтовой кодировке... Если подставить UCS2, при отправке через гипертерминал пишет ERROR... Помогите разобраться... =/
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
13.04.2011, 14:54  [ТС] 6
Я разобрался) Щас пишу мануал про длинные смс специально для таких, как я) Если кого интересует, обращайтесь. Буду рад помочь) Всем спасибо) Тему можно закрыть...
0
Leax
188 / 187 / 17
Регистрация: 07.11.2010
Сообщений: 477
13.04.2011, 15:43 7
DeadBoy, так тут и выложи. Тебе народ "спасибо" накидает- получишь "респект и уважуху" )
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
13.04.2011, 16:03  [ТС] 8
Leax, Выложу) Тока про длинные никак не допишу... Все времени нет... Если надо, могу первую часть выложить... ) Я её доработал основательно, за основу брал инструкцию в первом посте (большая часть содрана в наглую), за что спасибо StarXXX...
0
Leax
188 / 187 / 17
Регистрация: 07.11.2010
Сообщений: 477
13.04.2011, 16:27 9
Цитата Сообщение от DeadBoy Посмотреть сообщение
Если надо, могу первую часть выложить... )
и то хлеб... ))
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
13.04.2011, 16:34  [ТС] 10
Лучший ответ Сообщение было отмечено как решение

Решение

Вот первая часть обещанного мануала, вторую доделаю и выложу как смогу. Обо всех ошибках и неточностях сообщать мне. При копировании материала, указывайте ссылку на первоисточник. Если кому надо doc-версию для размещения статьи на сайте, пишите мне на мыло... Вот)
7
Вложения
Тип файла: pdf SendSMS_PDU_Part_1.pdf (308.4 Кб, 1493 просмотров)
Leax
188 / 187 / 17
Регистрация: 07.11.2010
Сообщений: 477
13.04.2011, 16:59 11
DeadBoy, все красиво оформлено с оригинальной статьи, молодец! А где свои наработки и то что понял? )
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
13.04.2011, 17:34  [ТС] 12
Leax, Хы... ) Дописал про TP-ID, добавил инфу про время действия, ну так кое что подправил, уточнил) Писал сначала для себя, как мне понятнее...

Добавлено через 2 минуты
В общем, просто дополнил статью) Щас чисто сам пишу, про связанные сообщения...
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
19.04.2011, 15:50  [ТС] 13
Лучший ответ Сообщение было отмечено как решение

Решение

Свершилось! Я наконец то дописал вторую часть мануала, про отправку длинных смс. Писал в попыхах, боюсь наделал много ошибок. Если что, пишите на почту, исправлю.

З.Ы. Также, прикладываю програмулину для создания PDU пакетов, написаную каким то китайцем) Взял с http://www.codeproject.com/, там же есть исходники если кому надо.

Ссылки по теме:
http://www.codeproject.com/KB/IP/PDUEncoder.aspx
http://www.codeproject.com/KB/windows/smspdulib.aspx
http://www.codeproject.com/KB/IP/PDUDecoder.aspx

Рекомендую:
http://www.codeproject.com/KB/cs/SMS.aspx
4
Вложения
Тип файла: pdf Send_SMS_PDU_Part_2.pdf (167.4 Кб, 800 просмотров)
Тип файла: zip encode_pdu.zip (14.2 Кб, 539 просмотров)
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
19.04.2011, 15:52  [ТС] 14
Функции на C# обещал включить в мануал, но проще их взяь тут:
http://hardisoft.ru/soft/otpravka-sm...-na-c-chast-2/
1
YoungBoy
53 / 53 / 2
Регистрация: 19.04.2011
Сообщений: 294
19.04.2011, 17:38 15
Зачет
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
19.04.2011, 17:43  [ТС] 16
YoungBoy, Всегда пожалуйста)
0
Nikcool
0 / 0 / 0
Регистрация: 28.07.2015
Сообщений: 3
21.08.2012, 07:46 17
Здравствуйте! Подскажите, есть ли AT-команда для подмены номера своим текстом при отправке СМС? Или это услуга оператора?
0
DeadBoy
14 / 14 / 2
Регистрация: 26.12.2009
Сообщений: 28
22.08.2012, 13:23  [ТС] 18
nikcool, я думаю, что это все таки услуга оператора) А иначе подобная штука была бы очень популярна...

Добавлено через 14 минут
Цитата Сообщение от Александр Письменный;
Здравствуйте, ТимЫч.

Огромное спасибо за проделанный труд в плане разборки формата PDU,
мне очень помогло. Сейчас приступаю к обратному декодированию...

В процессе изучения твоих статей мною были обнаружены неточности:

1. В файле SendSMS_PDU_Part1.pdf на 7 странице там где приводится
пример кодирования фразы "Hello!!!" в 7-ми битной кодировке
неправильно указан результат кодирования - первый байт 0xE8, который
получается путем сложения 0x48 и 0x80, т.е. должно быть 0xC8!

2. Во второй части на странице 4 там, где приводится пример
кодирования длинного сообщения в формате "GSM 7 бит" неправильно
рассчитывается длина поля UDHL = 159, а именно:
«9F» - Длина сообщения 152 символа + 1 Байт UDHL + 6 Байт UDH = 159, т.е. 9Fh
!!!поскольку длина в данной кодировке указывается в символах, а не
байтах, то 7 байт заголовка UDH = 8 символам в кодировке GSM,
т.е. значение поля 152 + 8 = 160 = 0xA0, как раз такое, как описано
тобой "Интересное наблюдение".
Аналогично - неправильно указана длина во втором сегменте сообщения:
не 130, а 131 должно быть.

Все мною замеченное проверено в работе на реальном железе и реальном
операторе: твой вариант не работает, мой работает.

Плюс:
Вот еще для простоты понимания алгоритма кодирования 7 бит привожу
свою процедуру на Си, во-первых она однопроходная, во вторых более
понятная.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
// вот такая простая формула для блока из восьми символов:
// a[i] = (a[i]>>i) | (a[i+1]<<(7-i)),
// восьмой выходной отбрасываем и все заново.
 
//-----------------------------------------------------------------------
// Перекодирование из 7 битной строки в 8-ми битную
// str - строка символов в формате 7 бит
// result - указатель на выходную строку
// length - ограничение кол-ва символов для перекодирования (удобно
// при разбивке на сегменты)
// size - размер выходного буфера
// В результате result будет содержать ASCII строку, готовую для
// отправки в модем, а на выходе длина полученной строки.
// Если возникла ошибка, то значение будет отрицательным.
//-----------------------------------------------------------------------
int GSM7TO8Convert(char *str, char *result, int length, int size)
{
  // Скорректируем размер, чтобы вместить завершающий ноль и лучше делать проверку
  size -= 3;
  // Получилась вот такая формула: a[i] = (a[i]>>i) | (a[i+1]<<(7-i));
  int len = 0;
  int i = 0;
  char b = *str++;
  while (b)
  {
    // Если указана длина перекодирования, то выходим
    if (--length == 0) break;
    char a = b;
    b = *str++;
    char c = (a>>i) | (b<<(7-i));
    if (++i == 8)
    {
      // каждый 8-й выходной символ пропускаем и начинаем сначала цикл
      i = 0;
      continue;
    }
    if (len >= size) return -len;
    *result++ = BIN_TO_HEX_DIGIT(c>>4);
    *result++ = BIN_TO_HEX_DIGIT(c);
    len += 2;
  }
  *result = 0;
  return len;
}
Вот как то так)

Добавлено через 18 часов 46 минут
По поводу получения и декодирования SMS-сообщений в формате PDU смотреть тут: Перейти на сайт
1
ikari81
4 / 4 / 0
Регистрация: 17.05.2011
Сообщений: 229
20.03.2013, 20:31 19
Здравствуйте! Отправлять смс в pdu научились, а как программно определить, смс в телефон/модем пришла текстом или pdu?
0
ksk
619 / 487 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
20.03.2013, 20:42 20
Как бы вот здесь есть хорошее руководство с примерами.

Только в примере есть специальная ошибка в кодировке номера и длине сообщения, видимо автора задолбали СМСками.

И кодировка там не русская. Но когда я подменил номер и добавил байтик, я получил СМСку.
0
20.03.2013, 20:42
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.03.2013, 20:42

Отправка sms с помощью ASP
Интересует сабж.

Отправка SMS с помощью ASP
Подскажите пожалуйста, как с помощью ASP и/или WEB-сервиса отправлять SMS-сообщения

Отправка SMS через сайт оператора
Здраствуйте. Я точно не знаю по адресу ли я попал. Итак для мобильной компании нужна программа смс...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.