« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
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        
    Популярное
Динамические структуры данных

Логический тип

Chapter 6. Освещение и все что с ним связано

Искусственный интеллект в CRPG

ГЛАВА 7 Таблицы каскадных стилей

KOL - кодоэкономичная объектная библиотека для Delphi.

C# глазами Java

Тестирование

Некоторые аспекты использования пользовательских функций в предложениях SQL.

Использование языков формальных спецификаций при проектировании реляционных баз данных




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 132
Пользователей: 0

Статьи:: Delphi :: Примеры на Delphi :: Отправка SMS при помощи Delphi



отправить ссылку другу версия для печати  Обсудить на форуме

Отправка SMS при помощи Delphi

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

Отправку SMS сообщения рассмотрим на примере оператора сотовой связи "Ульяновск- GSM ", позволяющего производить отправку SMS сообщений через Web- страничку по адресу:

http://sms.smarts-gsm.ru/sms.cgi

Для отправки SMS сообщения нужно заполнить поля формы:
в поле "Кому" ввести полный телефонный номер, например 78422973421 .
В поле "Что" вводится текст сообщения.
В списке "Формат" выбирается тип сообщения.
Отправка сообщения инициализируется кнопкой "Send>>".

Передаваемая строка на сервер оператора сотовой связи, при заполненном поле "Кому" - 78422973421, полем "Что" - " SMS ", в формате "Обычный SMS " выглядит следующим образом:

to=78422973421&msg=SMS&dcs=0 (1)

Разберемся откуда берется эта строка и что она означает. Если рассмотреть HTML код страницы, то видим следующую картину:

<FORM METHOD=POST ACTION="http://sms.smarts-gsm.ru/sms.cgi">
<INPUT TYPE=text NAME=to VALUE="" SIZE=15>[номер абонента]
<TEXTAREA NAME=msg COLS=30 ROWS=5> </TEXTAREA>
<SELECT NAME=dcs>
<OPTION VALUE=0>Обычный SMS
<OPTION VALUE=24 >Flash SMS
<OPTION VALUE=200 >Индикация голосового сообщения (Вкл.)
<OPTION VALUE=192 >Индикация голосового сообщения (Выкл.)
<OPTION VALUE=201 >Иидикация наличия факса (Вкл.)
<OPTION VALUE=193 >Иидикация наличия факса (Вкл.)
<OPTION VALUE=202 >Индикация сообщения E-Mail ( Вкл. )
<OPTION VALUE=194 >Индикация сообщения E-Mail ( Выкл. )
<INPUT TYPE=reset VALUE="Clean">
<INPUT TYPE=Submit VALUE="Send >>">
</FORM>

Очевидно, что это форма со следующими компонентами :

1) поле для ввода текста с именем to , куда вводится номер абонента
2) элемент ввода текста с именем msg , куда вводится текст сообщения
3) выпадающее меню с именем dcs , где выбирается тип сообщения
4) кнопка " Clean " для очистки формы от текстовой информации
5) кнопка "Send >>" для отправки содержимого формы на сервер

Таким образом, строка вида (1) образуется при отправке содержимого формы методом POST на CGI шлюз по адресу http://sms.smarts-gsm.ru/sms.cgi

Делаем вывод, что нужно при помощи Delphi сформировать такую же строку и отослать ее на сервер оператора сотовой связи. Отправку строки будем производить методом Navigate2 компонента T WebBrowser .

Спецификация метода следующая :


procedure Navigate2(var URL: OleVariant; var Flags: OleVariant; var TargetFrameName: OleVariant; var PostData: OleVariant; var Headers: OleVariant); overload;


Описание: метод используется при навигации и закачки специфичных ресурсов. Может отсылать НТТР сообщения на специфичные адреса URL и показывать при этом результаты выполнения этого метода.
Параметры:
var URL: OleVariant - переменная типа OleVariant, содержащая указатель на локальный файл или ресурс в сети Интернет.
var Flags: OleVariant - переменная типа OleVariant, может принимать одно из нескольких возможных значений:
Константа

Значение

Описание
navOpenInNewWindow 1 открывать файл или URL в новом окне
navNoHistory 2 не добавлять файл в лист History. Новая страница заменяет имеющуюся страницу в кэше.
navNoReadFromCache 4 Не читать страницу из кэша.
navNoWriteToCache 8 Не записывать результат навигации в кэш.
navAllowAutosearch 16 Если навигация не удалась, разрешить броузеру искать ресурсы с таким же названием, но с именем домена (com, .edu, и т.д.)

var TargetFrameName: OleVariant - имя фрейма в ресурсе, который должен быть отображен, или NULL если таковой не может отображаться в указанном URL.
var PostData: OleVariant - содержит данные, пересылаемые серверу. Используется для генерации POST метода. Если значение переменной NULL , то генерируется метод GET. Данные, содержащиеся в PostData
игнорируются, если URL по которому производится навигация, не HTTP типа.
var Headers: OleVariant - содержит НТТР заголовок передаваемых данных

Создадим форму в Delphi из необходимых для заполнения строки вида (1) компонентов. Добавляем также компонент TWebBrowser и делаем его невидимым из эстетических соображений. Выглядеть форма будет следующим образом:

Номер телефона должен заноситься в компонент ComboBox1 , а текст сообщения в Memo1. Обработчик кнопки "Отправить", будет выглядеть следующим образом:


var
vWebAddr, vPostData, vFlags, vFrame, vHeaders: OleVariant;
iLoop: Integer;
text,stPostData: String;
begin
text:=Memo1.Text;
stPostData:=′to=′+ComboBox1.Text+′&msg=′+text+′&dcs=0′;
vHeaders:= ′Content-Type:application/x-www-form-urlencoded′+ #10#13#0;
vPostData:= VarArrayCreate([0, Length(stPostData)], varByte);
for iLoop := 0 to Length(stPostData)- 1 do
begin
vPostData[iLoop]:= Ord(stPostData[iLoop+1]);
end;
vPostData[Length(stPostData)]:= 0;
TVarData(vPostData).vType:= varArray;
vWebAddr:=′http://sms.smarts-gsm.ru/sms.cgi′;
vFlags:=navNoWriteToCache;
vFrame:=EmptyParam;
try
WebBrowser1.Navigate2(vWebAddr,vFlags,vFrame,vPostData,vHeaders);
except
end;


Разберем код построчно.


stPostData:=′to=′+ComboBox1.Text+′&msg=′+text+′&dcs=0′;


заполняем строковую переменную stPostData значениями полей. Отправляем обычный SMS, поэтому dcs=0, исходя из значений в HTML форме


<OPTION VALUE=0>Обычный SMS
vHeaders:= ′Content-Type:application/x-www-form-urlencoded′+ #10#13#0;


здесь создаем HTTP заголовок в виде нуль-терминальной строки( оканчивающейся на #0 );


vPostData:= VarArrayCreate([0, Length(stPostData)], varByte);


здесь, для заполнения передаваемых данных создаем вариантный массив с минимальным пределом равным 0 и максимальным, равного длине строки Length(stPostData) типа varByte ( 8-ми битовое беззнаковое целочисленное значение (тип Byte ) )


for iLoop := 0 to Length(stPostData)- 1 do
begin
vPostData[iLoop]:= Ord(stPostData[iLoop+1]);
end;


здесь посимвольно заполняем вариантный массив значениями нашей строки


vPostData[Length(stPostData)]:= 0;


обнуляем последний элемент


TVarData(vPostData).vType:= varArray;


В поле vType помещается признак типа данных. Присваиваем вариантной структуре данных тип varArray, что означает "Вариантный массив". Данная операция необходимо для того, чтобы массив данных был вариантного типа. Если данную операцию не производить, то массив, хотя и будет состоять из значений типа variant , не будет вариантного типа. Далее


vFlags:=navNoWriteToCache;


ставим флаг "не записывать в кэш".
Затем, используя метод Navigate2 , отправляем заполненные структуры данных на известный нам адрес, предусмотрев обработку ошибки.

Подводные камни

1) Абонент может получить SMS сообщение в другой кодировке. Это объясняется тем, что в шлюзе производится обработка принимаемого сообщения только в какой-либо одной кодировке. Все зависит от конкретной реализации CGI шлюза. В любом случае кодировка подбирается экспериментальным путем.

2) Результат отправки сообщения появляется в новой странице, к примеру "Сообщение отправлено успешно", после того, как сервер принимает сообщение и генерирует при помощи шлюза новую страницу. Так что узнать, корректно ли принял SMS сообщение сервер, можно при анализе новой страницы, появляющейся в браузере.

delphi-ex.narod.ru







Вышел MySQL 5.1.30, первый стабильный рели....

MySQL

После публикации 29 тестовых версий анонсирован первый стабильный релиз MySQL 5.1, пригодный для промышленной эксплуатации и обеспечивающий увеличение производительности для "тяжелых" SQL запросов, по сравнению с MySQL 5.0, примерно на 15-20%. Главные новшества появившиеся в MySQL 5.1:


Подробнее... | Рубрика: MySQL | Добавлено: 28.11.2008

Тестирование параллельных программ.

Тестирование

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


Подробнее... | Рубрика: Тестирование | Добавлено: 28.11.2008

Архитектура AMD64 (EM64T).

Архитектура AMD

Аннотация. В статье кратко рассматривается архитектура AMD64 компании AMD и ее реализация EM64T компании Intel. Описаны особенности архитектуры, ее возможности, достоинства и недостатки.


Подробнее... | Рубрика: Архитектура AMD | Добавлено: 27.11.2008

Остальные статьи:

Платформа 2009. Определяя будущее
Windows Vista Bridge Sample Library - упра...
Оптимизация 64-битных программ
Подгрузка через AJAX HTML-кода, содержащег...
Обзор нового релиза самой мощной Ajax библ...
Firebug 1.3 и 1.4 alpha — что нового и инт...
Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия