这个投票平台是原理性的,使用的是普通的Nokia 6100作为接收端设备,没有经过严格的测试,在大量信息同时接受时可能出现短信拥塞、延时。

预备资料:

  1. Delphi下的ComPort控件
  2. Nokia AT Command Set
  3. SMS PDU Format

这里只说一下短信发送、接受的处理方法,至于收到短信后如何识别序号和更新数据,不是本文的重点。
在主窗体新建一个TComPort控件,名为ComMobile用于读写串口。将FlowControl中的DTR、RTS控制选项开启(Enable),否则无法与Nokia手机通讯。

首先使用AT+CMGS指令实现短信的发送。查阅PDU包格式进行编码。
注意以下几点:

  1. 最开始的“00”是指此PDU包不含有短消息中心信息,使用手机默认的短消息中心。
    注意:这个“00”不算在PDU长度里面,所以AT+CMGS命令所带的长度参数是从“11”开始计算起的,PDU包字节数(2个16进制编码一个字节)。
  2. 对小灵通的号码做了特殊处理,其号码类型为0xA1,即国内电话号码没有加号。
  3. 接受方号码为半字节拼装存储,一定要注意顺序,先低四位后高四位,不足的补1111。
  4. 直接使用UCS2编码,没有考虑到英文短信的问题。而且WideString本身就是UCS2编码的,所以直接转成16进制即可。
  5. 使用#13,不要使用#10!!#26是Ctrl+Z 。
  6. 这段代码没有考虑手机的应答,无法处理一些特殊错误~~~比如,手机没钱了,发不出短信 :-p

procedure TFormMain.SendSMS(num: string; text: WideString);
var
  sms: string;
  i, j, k: Integer;
  wchar: WideChar;
begin
  sms := ' 001100'+IntToHex(Length(num), 2);
  if Copy(num, 1 ,3) = '106' then
    sms := sms+'A1'
  else
    sms := sms+'91';
  for i := 1 to ((Length(num)+1) div 2) do
  begin
    if (i < ((Length(num)+1) div 2)) or (Length(num) mod 2 = 0) then
      sms := sms+num[2*i]+num[2*i-1]
    else
      sms := sms+'F'+num[2*i-1];
  end;
  sms := sms+'0008A7';
  sms := sms+IntToHex(Length(text)*2, 2);
  for i := 1 to Length(text) do
  begin
    wchar := text[i];
    sms := sms+IntToHex(Integer(wchar), 4);
  end;
  ComMobile.WriteStr('AT+CMGS='+IntToStr (Length(sms) div 2-1)+#13);
  ComMobile.WriteStr(sms+#26#13);
end;

Delphi下的手机短信投票平台(上)相关推荐

  1. 嵌入式Linux平台下的手机短信开发

    一.项目描述 现在我们所用的手机都是利用GSM网络来实现通信的,为了使手机发挥更大的用途,我们就产生此次话题. 本项目的初期效果:利用我们的手机发送短信到我们的GSM MODEM上,通过短信的解码,再 ...

  2. 编写了一个通过手机短信平台收发短信的软件

    看过我写的"使用Ajax技术编写的一个网站"这篇博客的网友也许已经知道我现在是做什么工作的了.由于工作的原因,需要在网络上从事一些进行商业营销的活动,以帮助工作的开展.比如:介绍公 ...

  3. KIDSMS手机短信平台软件 v1.00 公开发表

    KidSMS手机短信平台软件是一个以手机短信为平台,具有投票.评论.查询.广告功能的通信终端系统,轻量级是它最大的特点.太多短信系统是使用SP服务商+WEB管理的方式建立的,我称其为托管模式,托管模式 ...

  4. Flask项目实战——6—(前台用户模型、前台登录注册、图形验证码、手机短信验证码、添加表单验证短信验证码请求)

    1.前台用户模型 前台用户模型定义 创建前台模型文件 apps/front/models.py # -*- encoding: utf-8 -*- """ @File : ...

  5. 安卓手机短信误删能恢复吗?

    安卓手机短信误删能恢复吗?手机短信在目前生活中不经常使用到,因为我们现在比较喜欢用社交软件与别人进行交流,但是短信依然还是十分重要的存在,因为在一些相对重要的场合,我们还是会选择用短信的.那么我们的短 ...

  6. 手机短信验证服务,为个人信息安全提供保障

    近年来,随着科技的不断创新与进步,电子商务网站已经成为了人们日常生活中不可缺少的一部分.与传统商务模式相比,电子商务的确有着其无可比拟的巨大优势,随着电子商务的不断兴盛,也衍生了许许多多的新兴服务产业 ...

  7. Python发送手机短信(融合云信平台)

    写下这篇文章,算是记录一下Python发送手机短信的过程.现在通过手机短信推送信息一般比较方便,在企业内部,一般用邮件推送通知,如果不是每个人都有邮箱的话,邮件推送的局限性就出来了.手机短信的实时性比 ...

  8. Delphi手机短信

    目前大多数的企业及学校内部都建有Intranet.并建有内部网站实现资源共享.为了使用户及时的得知网上的最新信息,很多网站都采用了手机短信提醒的方式,但使用中国移动或中国联通的SP方式,会大大的增加企 ...

  9. 手机短信验证码注册-短信平台验证码开发6

    经过前面的基础准备工作后, 就可以正式进入开发的阶段了, 我们的短信接口开发, 主要以实现手机短信验证码功能案例, 进行演示, 因为这个功能在实际项目中用得最多. 这一节课程, 我们先把手机短信验证码 ...

最新文章

  1. 看大神如何使用vue导出pdf
  2. spring:注解@Resource,实现引用类型的赋值
  3. java遍历文件夹并把所有文件放到list中
  4. 最新linux面试题
  5. linq to sql 多条件组合查询
  6. vue引入turn.js
  7. 数据库 创建 / 查看/ 删除
  8. PHP----练习-----新闻管理----增删改查
  9. 均值(信息学奥赛一本通-T1060)
  10. 【java】Java中TypeReference用法说明
  11. linux系统的空间满的问题
  12. 去海南旅游什么时间段去最好,哪里最好玩?
  13. ROS的学习(十)rqt_console和roslaunch
  14. Kotlin的互操作——Kotlin与Java互相调用
  15. Docker提高拉取官网镜像的速度
  16. ELK logstash基本配置
  17. 2021年网络工程师考试大纲
  18. 办公室计算机收不到主机打印机,图文详解电脑怎么连接办公室打印机 一招教你搞定!...
  19. 完美数——C++代码及思路分析 leetcode507
  20. HTTP协议相关的网络经典五层模型

热门文章

  1. APK反编译及防护技术
  2. SpringBoot 嵌入式Tomcat无法启动:Unable to start embedded Tomcat
  3. js数组的增删改查方法、js截取数组方法
  4. 用Transformer进行图像语义分割,性能超最先进的卷积方法!
  5. 文科转码人第一个项目记录——B站动力节点《米米商城》
  6. 有n个人围成一圈 顺序排号 java_java基础编程题有n个人围成一圈顺序排号
  7. 不上班+月入过万,聊聊几个新职业
  8. 一种清洁机器人设计及仿真
  9. 【windows Server 2019系列】 构建IIS服务器
  10. sklearn——数据降维