Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.09.2015, 15:40   #1
Massaget
Пользователь
 
Регистрация: 30.07.2015
Сообщений: 21
Вопрос Отправка длинных (мультипарт) СМС на латинице и кирилице через 3G USB модем

Сперва прошу всех!
Не отсылать куда-то и не нервничать (знаю, этот вопрос был уже озвучен много раз, но воз и ныне там)!
Сам пытался найти решение. Скачал кучу доков, спецификаций, статей и исходников. Чужой писательский труд я не переварил из-за сложности хитрых манипуляций и извращений (в синтаксисе PDU, номера телефона) и отсутствия опыта по теме. Следующие исходники не справились с задачей.

Имена оригинальных файлов из инета:
Имя файла Размер файла (в байтах)
12_Siemens_AT_sour.rar 223 465
Delphi-SMS-API_2.0.zip 340 694
deniall-send-sms-for-beline.zip 47 710
dSMSFree.rar 518 218
gsm_lib_v.1.0_x32.rar 365 096
pdu.zip 1 503 963
SendSMS.rar 318 521
sms_beeline.rar 88 070
SMS_GSM.rar 201 772
sms_mailing.rar 83 278
SMSFrom1C2_Src.zip 23 504
ter.rar 188 961
ter1.rar 187 753
ter3.rar 197 293
ter_.rar 188 320.

Все исходники взяты из Хабры, Исходников.ру и прочих программерских форумах. Но повторюсь, ни один из них не смог выполнить отправку длинной СМС на кирилице.
В связи с этим прошу всех кто имеет или может помочь, поделиться проверенным им самим рабочим куском кода / проектом решающий следующие 3 пункта (высший приоритет у №1 и т.д. в порядке уменьшения):

Что мне нужно?
1) Поддержку длинных СМС на латинице и кирилице. Спецсимволы на клаве и многострочность (через Enter).
2) Запрос об отправке и доставке СМС абоненту. Чтобы быть в курсе, доставлено СМС или нет?
3) Возможность удаления СМС по выбору / всех. Чтобы очищать память устройства / симкарты и удалять старые отчёты об уведомлении.

Что я имею?
ОС: WIndows XP SP3, Linux Ubuntu 12.04.
Языки ООЯП: Delphi 7, Delphi XE3.
3G USB модемы: ZTE MF100, ZTE MF180 (разлоченный) Huawei E173 (разлоченный).

Чего добился сам?
Утилита (писал в Delphi 7). Из функционала утилиты:
1) COM порт (открыть, закрыть);
2) терминал (отправка AT команд);
3) транлитератор (преобразует кирилицу в латиницу, есть возможность расширить функцию и сделать обратный процесс);
4) кодировка (кодирует текст в UCS2 и 7 bit);
5) СМС - менеджер, отправка СМС (коротких, на латинице);
6) также добавлена (но закомментирована, нужно доработать) возможность автоматическое выполнение АТ команд каждые n секунд / минут;
7) ведёт лог. Ну и другие полезные фичи по мелочи.
Massaget вне форума Ответить с цитированием
Старый 09.09.2015, 20:42   #2
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

стукни в аську завтро дам исходник. помогу разобраться
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Старый 09.09.2015, 21:17   #3
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Цитата:
стукни в аську
Нет не через аську .... через какой то защищённый сервис передайте ваши код . так что не кто не посмотрел А то тайна будет открыто
xxbesoxx вне форума Ответить с цитированием
Старый 11.09.2015, 06:36   #4
BARNEY
Участник клуба
 
Регистрация: 23.04.2009
Сообщений: 1,058
По умолчанию

А зачем сарказм? Тема не раз обсуждалась, исходников полно в инете...зачем тему то засорять? или Вам тоже этот вопрос актуален? Мне сюда весь лапша код вытащить?

Кодирование
Код:
function TGSMComander.AnsiToUCS(AStr: AnsiString): AnsiString;

  function Convert(AChar: AnsiChar): AnsiString;
  var
    j: integer;
  begin
    Result := '';
    j := ord(AChar);
    case j of
      192..255: j := j + 848;
      184: j := 1105;
    end;
    Result := IntToHex(j, 4)
  end;

var
  c, i: integer;
begin
  Result := '';
  c := Length(AStr);
  for i := 1 to C do
    Result := Result + Convert(AStr[i]);
end;
Отправка
Код:
function TGSMComander.SendSMSMessage(ASMS: TSMSMessage): Boolean;
var
  Lng, i:  Integer;
  LRead, LText, LMes, LTel, ANum: String;
begin
  ANum := ASms.Number;
  if (Length(ANum) mod 2) = 1 then
    ANum := ANum + 'F';

  for i := 1 to Length(ANum) do
    if i mod 2 = 0 then
      LTel := LTel + ANum[i] + ANum[i-1];

  LText := AnsiToUCS(ASms.Text);
  LMes := '00'; // Длина и номер SMS центра. 0 - означает, что будет использоваться дефолтный номер.
  LMes := LMes + '31'; // SMS-SUBMIT
  LMes := LMes + '00'; // Длина и номер отправителя. 0 - означает что будет использоваться дефолтный номер.
  LMes := LMes + IntToHex(Length(ASms.Number), 2); // Длина номера получателя
  LMes := LMes + '91'; // Тип-адреса. (91 указывает международный формат телефонного номера, 81 - местный формат).
  LMes := LMes + LTel; // Телефонный номер получателя в международном формате.
  LMes := LMes + '00'; // Идентификатор протокола
  LMes := LMes + '08'; // Старший полубайт означает сохранять SMS у получателя или нет (FLASH sms),  Младший полубайт - кодировка(0 - латиница 8 - кирилица).
  LMes := LMes + 'C1'; // Срок доставки сообщения. С1 - неделя
  LMes := LMes + IntToHex(Trunc(Length(LText)/2),2); // Длина текста сообщения.
  LMes := LMes + LText; // TP-User-Data. Эти октеты представляют сообщение "hellohello", преобразованное в 7 битку.
  Lng := Round((Length(LMes)-2)/2);

  WriteStr(Format(CMD_CMGS, [Lng]));

  //WriteStr(Format(CMD_CMGS, [26]));
  WriteStr(LMes + END_CMD);

  Result := ReadToOK(LRead)
end;
Если вам человек помог, не стесняйтесь говорить спасибо (весы под аватаром)
BARNEY вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Отправка СМС проблемы с USB модема Regard Общие вопросы Delphi 10 01.09.2015 15:45
Считывание смс с мобильного телефона через USB enernet Общие вопросы Delphi 1 12.03.2012 13:32
3G usb-модем и получение смс belarusfight C/C++ Сетевое программирование 4 22.01.2012 21:53
Отправка СМС через USB модем. Armatus Win Api 11 06.06.2011 14:26
Отправка SMS через USB модем? Leximus Общие вопросы Delphi 18 18.03.2011 22:11