SMS开发,请大家多多支持,多提宝贵意见,见者有分(300分)

  • 主题发起人 LanFairy
  • 开始时间
好,500分,我给,只要程序能够正常收发短信。
怎么样?
 
PDU模式短信发送成功
但是手机接收到该短信发现乱码,却又不是全部乱码
例如:
我发送: “大富翁论坛讲座”
接收结果:“大富翁论坛讲座?#”“大富翁论坛讲座—”。。。。
请问原因何在?是否跟编码有关
其中发送的PDU包为
“0891683108304605F011000B913109009099F90008AA0E59275BCC7FC18BBA575B8BB25EA7”
大富翁论坛讲座”编码:59275BCC7FC18BBA575B8BB25EA7
长度:14=X0E
我想TP-UDL可能没错。
除了PDU包错外,会不会其他地方错啦。例如串口连接参数等?????
请多多指教
 
To Feizi:
你用的是什么模块?你的接收手机是什么?
你下载我得程序(http://www.delphibaby.com/down/sms.exe),将串口结在COM1上
看看发送行不?要是行,告诉我EMAIL,给我加500分,我送你源程序(包括接受短信的汉字解码单元)
 
直接用pc也可以?我记得好像要用ms 的什么sms包才可以的呀
 
通过手机发送:手机连上计算机,打开telnet发送下面指令就可收到“欢迎”
At+cmgf=0
At+cmgs=18
>0011000B813100951420F0000810046B228FCE^z
收发信息都是pdu数据格式,关键会at指令就行了,可以参考gsm协议07.05,但一些新功能
如动画短信就要参看具体厂家的at comand。要不存卡上应该要手机支持的,我的siemens3618
就可以先存机子上,满了再存卡上。
发信息:pdu数据格式
00 11 00 0B 81 3100951420F0 000810 04 6B228FCE

00 SC地址长度,这里不指定短信中心,所以是0,这个字节不包括在“AT+CMGS=LENGTH”中的length里,其它的都包括在。
11 文件头字节(header byte,是一种bitmask)。这里11指正常地发送短信息
10000000:回复路径(Reply Path):移动电话可循发送SMS消息的短消息中心进行回复(但并非所有SMSC都会这样设置)。
01000000:TP-UDH - 带有用户数据文件头。
00100000:TP-Status-Report-Indication - 发送状态报告给发信人,表示消息收到。
00010000、00001000:此两类在正常的移动终接短消息(MT,Mobile Terminated SMS)中不会使用。
00000100:TP-More Messages to Send - SMSC内再无新消息发送给该移动电话。
00000010、00000001:最后两个位数表示消息种类 - 10指是移动终接短消息(MT),01指移动起始短消息(MO,Mobile Originated SMS)。
00 信息类型
0B 被叫号码长度
81 被叫号码类型
3100951420F0 被叫号码(13005941020)F表示信息长度少一位
000810 短信息编码类型GSM Default Alphabet,如为中文则是000010,08表示发送PDU格式的中文(UNICODE)
04 短信长度
6B228FCE 表示中文短信“欢迎”,unicode格式,这同被叫号码一样做了类似的处理。其中,6B为“欢”字的低字节,22为高字节,8F为“迎”字的低字节,CE为高字节,如果以字符数组的方式来表示“欢迎”,则str[0]=22, str[1]=6B, str[2]=CE, str[3]=8F。
 
开发SMS应用还是比较简单的,只要你懂SOCKET程序的开发就可以了!
然后到ETSI上找SMPP的文档,到移动梦网的网站上找CMPP的文档,到
联通在信的网站上找SGIP的文档,看懂他们!就一切OK!
至于编码转换的问题大家可以到网上搜索一下好像有一个叫txt2sms的函数库(delphi)
一般来说除非 用smpp发送纯ascii的文本,都用不到编码转换!cmpp/sgip
都支持直接发送ASCII,至于中文也一样,不过编码方式的代码要用15(GBK),
当然你也可以用UCS2,如果你用DELPHI那么你用WIDESTRING就可以了!
另外提醒大家,在cmpp/sgip中凡是超过两位的数据类型,都要将高低位调换过来!
 
我学,我学,我学学学!
 
//有支持短信协议互转网关程序(For NT) 并提供业务开发包及 业务生成工具
//总之从无到到有实现与移动联通连接并提供诸如移动聊天,股票查询之类的服务
//只需1天时间(可以编程控制业务流程)
//(For UNIX/Linux 正在开发中 )/
//支持多用户接入及子号码分配
//可以控制每个用户发送量
//支持 SMPP/SGIP/CMPP 之间互转
//请邮件 netbabys@21cn.com
//QQ 2412932 加入时请注明 短信字样
 
//可以直接连接移动,联通及LOGICA,华为,傲天,英斯克,北伟
//东大NOKIA,清华声讯网关
 
还提供超强客户端软件(可以OEM)
客户端软件可以去 sms.1288.net
sms.czinfo.net 下载
具体流程是
聊天 ---/
股票查询--/
新闻定制--->应用业务---/
  客户端软件-->>-TKTRANS--->>移动或是联通网关--->>用户手机
网站 -----/
 
to:jollier,
短信的CNMI设置可以设置短信报道的提示方式的。
你可以设置为到卡中,当然此时读到的是+CMTI,"SM",Index
如果 CNMI设置对了,可以直接读取短信,提示内容为+CMT,……,短信内容,
但感觉捕捉短信不准确。
如果是多个的话,用多串口卡吧,一个发短信,其他的收
 
好好听听
 
1、连接到短信中心,短消息按照一定的格式直接从短信中心网关发出去
2、找一个手机模块或者手机,用AT指令发送短消息,具体的指令可以看GSM0705和GSM0707
里面有详细的协议。不过不同的手机可能有一些特殊的,我的手机是Siemens 6618,我
专门从网上down了一个AT指令集
 
短消息模块(或称做无线Modem)满街都是,前段时间我做了一个程序,客户已经正式启用
原理、实现很简单,采用AT命令(贴在下边),没有什么难度,就是编码转换费了些时间。
GSM模块使用文档(短信息部分)
1.概述
参考资料:
· AT_v8.6.pdf At Command Interface
· SMS_PDU-mode.pdf An Introduction to the SMS in PDU mode
AT命令:
GSM模块与计算机之间的通信协议是一些AT指令集,详见(AT_v8.6.pdf)。每个指令以AT+开头,以回车结尾。每个命令执行成功与否都有相应的返回。其他一些非预期的信息(如有人拨号进来、线路无信号等),模块将有对应的一些信息提示,接收端可做相应的处理。
控制符:
结束符(<CR>)十六进制的0x0D
发送符(<Ctrl/Z>)十六进制的0x1A
2.常用命令(其他一些相关命令参见附带文档)
2.1开机
首先,要插入SIM卡(插卡时要断开电源),接好天线和电源,等信号指示灯开始闪动时表示模块已经开机,并且注册GSM网络成功。此时模块处于待机状态,当有用户拨号进来时,串口将有相应的提示信息。
要测试模块在此地的信号强度,可发送命令:AT+CSQ+<CR>(返回若含99则表示无信号)。
2.2设置
1. 设置发送短信息的模式:AT+CMGF=0+<CR>
0代表PDU模式;1代表Text模式。
2. 设置短信息接收模式
· 直接串口接收:AT+CNMI=2,2,0,0,0+<CR>
有短信息来时,不经过SIM卡,直接写串口(如果此时端口没打开,则该短信息有可能丢失)。
· 通过SIM卡接收:AT+CNMI=2,1,0,0,0+<CR>
这是缺省设置,主动去读SIM卡中的短信息(建议使用该参数)。详细信息参见(AT_v8.6.pdf 96页)
3. 保存当前模块的参数设置:AT&amp;W+<CR>
详细参数设置参见AT_v8.6.pdf 107页
2.3发送短信息CMGS
2.3.1用Text 模式发送短信息
格式(只能发送160个英文字符)
at+cmgf=1<CR> //发送模式设置,设为文本模式
OK
AT+CMGS=”13988888888”<CR>Send Message by Text-Mode<Ctrl/Z>
// 目的手机号码|结束符|内容 |发送符|
+CMGS: 199 //发送返回
OK
参考AT_v8.6.pdf 102页
2.3.2用PDU发送短信息格式(参考SMS_PDU-mode)
at+cmgf=0<CR> //发送模式设置,设为PDU模式
OK
AT+CMGS=<PDU包的字节数(ddd:三位十进制格式)>//不包含SMSC的长度
<CR>
00 //SMSC长度,此处省略SMSC
11 //FO
00 //TP-MR
0D //号码长度
91 //Type of Address
68 //中国的国际区号
<手机号码编码>
00 //PID
08 //编码模式:08为Unicode编码,00为Bit7编码,15为Bit8编码
A7 //有效期
<短信息内容编码后的字节数(ff:两位的十六进制)>
<短信息内容编码> //Unicode或Bit7或Bit8
<Ctrl/Z>
TPDU的组成的几点说明
1. DA目的地址
2. ASCII编码
3. 中文编码
DA 目的地址(参考SMS_PDU-mode 3.1)
例子:0D91683106318834F9 ;
8613601388439
0D(13) Address Length目的电话长度
91 Type of Address
683106318834F9 8613601388439采用Semi-octet representation (参考SMS_PDU-mode 4.5)
Bit7编码
用户数据如果为非中文,可采用7-bits characters 7位编码法
此时将dcs=00
(参考SMS_PDU-mode 4.6)
中文编码
用户数据如果为中文,可采用UCS2编码法
此时将dcs=08
将中文直接转换成UniCode。采用WinAPI:MultiByteToWideChar来实现。
Bit8编码
发送任何二进制数据(0x00~0xFF),可采用Bit8编码法
此时dcs=15
每个字节按Hex格式发送,如0x86的Hex格式为:“86”,实际发送“86”
接收方须与发送方协调一致
发送举例
先发送AT+CMGS= YYY [CR] ;其中 YYY 为TPDU的十进制长度,不包括SMSC的长度
发英文用Bit7编码dcs=00,编码前用户数据最大长度为160字节
发中文用UCS2编码dcs=08,编码前用户数据最大长度为70字
发送二进制数据用Bit8编码dcs=15,编码前用户数据最大长度为140字节
1. 用Bit7编码发送英文信息
以下例子 发送到 13606809135
报文是 1234
用Bit7译码为
0431D98C06
04 长度
数据 31D98C06 1234的Bit7编码
具体AT命令
AT+CMGF=0[CR] 设为PDU格式
AT+CMGS=019[CR]
0011000D91683106869031F50000A70431D98C06[Ctrl/Z][CR]
2. 用UCS2编码发送中文信息

以下例子 发送到 13603021052
报文是 你好
用UCS2译码为
044F60597D
04 长度
数据 4f60597d 汉字UniCode码
具体AT命令
AT+CMGF=0[CR] 设为PDU格式
AT+CMGS=019[CR]
0011000D91683106031250F20008A7044F60597D[Ctrl/Z][CR]
3.用Bit8编码发送二进制数据

以下例子 发送到 13857162075
报文是 0x86 0x40
用Bit8译码为
8640
02 长度
具体AT命令
AT+CMGF=0[CR] 设为PDU格式
AT+CMGS=017[CR]
0011000D91683158172670F50015A7028640[Ctrl/Z][CR]

2.4接收短信息CMGR
如果是通过SIM卡接收短信息,则应该先得到新的短信息到的通知信息(即监视串口的+CMTI<新短信息的索引号>)。
如果是不通过SIM卡接收短信息,则要实时处理串口的+CMT<短消息包结构>
用Text 模式接收短信息格式
AT+CMGR=1<CR>
按Text模式分解返回包
用PDU接收短信息格式
AT+CMGR=0<CR>
按PDU模式分解返回包
2.5删除短信息CMGD
AT+CMGD=<短信息索引号><CR>
2.6列出SIM卡中短信息CMGL
利用该命令可以读出SIM卡中未读的短信息。
AT+CMGL=”ALL”<CR> //文本模式下读未读短信息
AT+CMGL=0<CR> //PDU模式下读未读短信息
3.注意事项
使用好模块的关键的两个问题:
1. 处理好发送的命令与它的返回同步;
2. 及时处理好一些非预期的事件,将没有用的信息扔掉。

 
http://wenjinshan.wx-e.com/index2.htm
这里有源代码
 
http://www.delphibaby.com/down/sms.zip 的密码是什么?
 

Similar threads

D
回复
0
查看
2K
DelphiTeacher的专栏
D
顶部