CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VB >  基础类

短信模块的问题?大家快来抢分

楼主wycwyc(.net老菜)2004-09-03 14:47:46 在 VB / 基础类 提问

我现在正在编写一个短信模块,(用标准的AT命令进行编写),现在遇到的问题就是:如何判断我的短信信息发送成功?是否存在返回值,如果存在应该如何捕获呢?? 问题点数:0、回复次数:17Top

1 楼wycking(讨)回复于 2004-09-03 15:10:59 得分 0

关注Top

2 楼LGYAN(紫衣随想)回复于 2004-09-03 15:13:17 得分 0

抢一下!Top

3 楼lovebeethoven(小佛-寻找幸福)回复于 2004-09-03 15:34:32 得分 0

怎么抢?Top

4 楼chewinggum(口香糖·个人二五计划第一年)回复于 2004-09-03 15:35:15 得分 0

爱莫能助帮你顶吧Top

5 楼xmmmhdj(猫猫)回复于 2004-09-03 15:42:12 得分 0

应该到高级区去问,西西!Top

6 楼starsoulxp(星魂)回复于 2004-09-03 16:22:23 得分 0

楼主参考一下,希望能给你帮助。  
   
  用PocketPCPhone替代AT指令的手机SMS服务      
    发表日期:2004-03-02   作者:转自CSDN[]   出处:        
     
     
  新型Pocket   PC电话版已将Pocket   PC所具备的全部精妙特性同最新电话功能集于一身,我们该到淘汰老式手机的时候了。  
   
   
  国产联想   ET180,   dopod   696,dopod   686   等,都是   Pocket   PC   Phone中的精品,且   ET180中关村售价己经降至   ¥3700元!  
   
   
  看到大家在破8850等机器上折腾AT指令集编写短信收发程序,我感到万分难过。   有这么好用的   Pocket   PC   Phone,为什么还要用AT指令集的破玩意儿呢?  
   
   
  采用AT指令集编写短信收发程序,需要解决许多技术难题和非计算难题,能折腾你好一阵子,我们就不说了。加上一些不法商贩老是在网上倒腾些控件在兜售,我无法忍受了!  
   
   
   
  这里我提供了另外一种途径发送中文短信,并给出全部源码,供大家下载。  
   
   
  ET180   PPC机和多普达手机中,含有强大的WINCE操作系统,可以使用WINCE操作系统的开发工具开发出一个简单的短信发送程序。  
   
   
   
  环境:       联想et180机器,操作系统Pocket   2002,   开发工具为eVB3.0  
   
   
  源代码:  
   
   
   
  1、创建一个Modules:   SMSMessage    
   
   
  源码如下:  
   
   
  Option   Explicit  
   
   
  '   API   declarations  
   
  Public   Declare   Function   SmsOpen   Lib   "SMS"   (ByVal   ptsMessageProtocol   As   String,   ByVal   dwMessageModes   As   Long,   ByRef   psmshHandle   As   Long,   ByRef   phMessageAvailableEvent   As   Long)   As   Long  
   
  Public   Declare   Function   SmsSendMessage   Lib   "SMS"   (ByVal   smshHandle   As   Long,   ByVal   psmsaSMSCAddress   As   Long,   ByVal   psmsaDestinationAddress   As   String,   ByVal   pstValidityPeriod   As   Long,   ByVal   pbData   As   String,   ByVal   dwDataSize   As   Long,   ByVal   pbProviderSpecificData   As   String,   ByVal   dwProviderSpecificDataSize   As   Long,   ByVal   smsdeDataEncoding   As   Long,   ByVal   dwOptions   As   Long,   ByRef   psmsmidMessageID   As   Long)   As   Long  
   
  Public   Declare   Function   SmsClose   Lib   "SMS"   (ByVal   smshHandle   As   Long)   As   Long  
   
   
  '   API   constants  
   
  Public   Const   SMS_MSGTYPE_TEXT   =   "Microsoft   Text   SMS   Protocol"  
   
  Public   Const   SMS_MODE_SEND   =   2               '   Open   in   send   mode  
   
  Public   Const   SMSDE_GSM   =   0                   '   Use   Unicode   GSM   encoding  
   
  Public   Const   SMSAT_INTERNATIONAL   =   1         '   International   number   format  
   
  Public   Const   PS_MESSAGE_OPTION_NONE   =   1     '   message   options  
   
  Public   Const   PS_MESSAGE_CLASS0   =   0           '   Send   immediately  
   
  Public   Const   PSRO_NONE   =   0                   '   No   replacements  
   
  Public   Const   SMS_OPTION_DELIVERY_NONE   =   0   '   No   delivery   options  
   
   
   
  Public   Sub   SendSMS(ByVal   Number   As   String,   ByVal   Message   As   String)  
   
   
    Dim   SMSHandle   As   Long  
   
    Dim   SMSEvent   As   Long  
   
    Dim   SMSAddress   As   String  
   
    Dim   SMSProvider   As   String  
   
     
   
    '   Open   SMS   Messaging   Component  
   
    If   0   <>   SmsOpen(SMS_MSGTYPE_TEXT,   SMS_MODE_SEND,   SMSHandle,   SMSEvent)   Then  
   
      MsgBox   "Could   not   open   SMS   component!",   _  
   
              vbCritical,   App.Title  
   
      Exit   Sub  
   
    End   If  
   
   
    '   Set   Address   structure   (UDT   as   string)  
   
    SMSAddress   =   LongToBytes(SMSAT_INTERNATIONAL)   &   Number  
   
   
    '   Set   Provider   structure   (UDT   as   string)  
   
    SMSProvider   =   LongToBytes(PS_MESSAGE_OPTION_NONE)   &   _  
   
                  LongToBytes(PS_MESSAGE_CLASS0)   &   _  
   
                  LongToBytes(PSRO_NONE)  
   
   
    '   Send   message  
   
    If   0   =   SmsSendMessage(SMSHandle,   0,   SMSAddress,   0,   Message,   LenB(Message),   _  
   
            SMSProvider,   12,   SMSDE_GSM,   SMS_OPTION_DELIVERY_NONE,   0)   Then  
   
      'MsgBox   "Message   sent!",   vbInformation,   App.Title  
   
      MsgBox   "短信息发送成功!",   vbInformation,   App.Title  
   
    Else  
   
      'MsgBox   "Could   not   send   message!",   vbCritical,   App.Title  
   
      MsgBox   "短信息发送失败!",   vbCritical,   App.Title  
   
    End   If  
   
     
   
    '   Close   SMS   Messaging   Component  
   
    If   0   <>   SmsClose(SMSHandle)   Then  
   
      'MsgBox   "Could   not   close   SMS   component!",   vbCritical,   App.Title  
   
      MsgBox   "无法关闭短信息组件!",   vbCritical,   App.Title  
   
      Exit   Sub  
   
    End   If  
   
   
  End   Sub  
   
   
   
  Function   LongToBytes(ByVal   Value   As   Long)   As   String  
   
     
   
    Dim   lsHex   As   String,   i   As   Integer  
   
     
   
    lsHex   =   Right("00000000"   &   Hex(Value),   8)  
   
    For   i   =   1   To   7   Step   2  
   
      LongToBytes   =   ChrB(CInt("&H"   &   Mid(lsHex,   i,   2)))   &   LongToBytes  
   
    Next  
   
   
  End   Function  
   
  Function   BytesToLong(ByVal   Value   As   String)   As   Long  
   
     
   
    Dim   lsHex   As   String,   i   As   Integer  
   
     
   
    For   i   =   1   To   4  
   
      lsHex   =   Hex(AscB(MidB(Value,   i,   1)))   &   lsHex  
   
    Next  
   
    BytesToLong   =   CLng("&H"   &   lsHex)  
   
   
  End   Function  
   
   
  2、创建一个窗体,frmSMS  
   
  包含两个文本框,一个按钮,源码如下:  
   
  Private   Sub   Command1_Click()  
   
      SendSMS   txtNumber.Text,   txtMessage.Text  
   
  End   Sub  
   
   
   
  大家可以用winSock编写一个小程序,实现PPC和PC之间的通讯,达到把et180机器作为短信中心的目的,实现如办公自动化系统之类的应用软件   手机短信收发功能。  
   
   
  大家如有技术发面的意见建议,请到MSN(mr_hsx@hotmail.com   ,Seala@126.com)上联系。  
     
  Top

7 楼wycwyc(.net老菜)回复于 2004-09-03 16:24:17 得分 0

难道没有人做过手机短信业务么?Top

8 楼starsoulxp(星魂)回复于 2004-09-03 16:26:03 得分 0

用VB6.0编写手机短信发送  
   
  http://www.enet.com.cn/eschool/inforcenter/A20040525311257_1.html  
   
  手机短信的发送主要借助于VB的Mscomm控件实现,关于Mscomm控件,前面的技术介绍部分有详细介绍。短信的发送是由AT+CMGS指令完成的,采用PDU模式发送,函数代码如下:    
   
    Const   prex   =   "0891"    
    Const   midx   =   "11000D91"    
    Const   sufx   =   "000800"    
    Public   Function   Sendsms(csca   As   String,   num   As   String,   msg   As   String)   As   _Boolean    
       Dim   pdu,   psmsc,   pnum,   pmsg   As   String    
       Dim   leng   As   String    
       Dim   length   As   Integer    
       length   =   Len(msg)    
       length   =   2   *   length    
       leng   =   Hex(length)    
       If   length   <   16   Then   leng   =   "0"   &   leng    
       psmsc   =   Trim(telc(csca))    
       pnum   =   Trim(telc(num))    
       pmsg   =   Trim(ascg(msg))    
       pdu   =   prex   &   psmsc   &   midx   &   pnum   &   sufx   &   leng   &   pmsg    
    sleep(1)    
       mobcomm.Output   =   "AT+CMGF=0"   +   vbCr    
       mobcomm.Output   =   "AT+CMGS="   &   Str(15   +   length)   +   vbCr    
    mobcomm.Output   =   pdu   &   Chr$(26)    
    sleep(1)    
       Sendsms   =   True    
    End   Function      
   
    因为手机同一时间只能处理一件事情,因此这个函数只负责发送短信,关于短信发送成功与否以及阅读短信的部分集中在一起处理。判断手机短信发送成功与否主要由AT+CMGS命令执行以后的返回码来决定(可参见前文的AT指令介绍部分)。    
   
    为了防止手机因过于繁忙而出错,这里采取了一定的方法让手机有充分的时间处理发送和接收及删除等操作。Sleep()函数正是为此而设计的,在发送及删除操作后都会让程序暂停一秒,这样就不至于使得手机过于繁忙。    
   
  Unicode码解码函数      
   
    相比于手机短信的发送而言,手机短信的接收主要的工作正好与之相反。手机短信的发送需要将待发送的短信内容转换为Unicode码,而短信的接收则需要将接收到的Unicode码转换成中文字符。下面的函数将实现解码功能。同手机短信发送的编码函数一样,这里也应用了一个VB内置的函数AscW()函数来将Unicode码转换为中文:    
   
    Public   Function   ascg(smsg   As   String)   As   String    
    Dim   si,   sb   As   Integer    
    Dim   stmp   As   Integer    
    Dim   stemp   As   String    
    sb   =   Len(smsg)    
    ascg   =   ""    
    For   si   =   1   To   sb    
       stmp   =   AscW(Mid(smsg,   si,   1))    
       If   Abs(stmp)   <   127   Then    
       stemp   =   "00"   &   Hex(stmp)    
       Else    
       stemp   =   Hex(stmp)    
       End   If    
       ascg   =   ascg   &   stemp    
    Next   si    
    ascg   =   Trim(ascg)    
    End   Function     
   
    2   手机短信接收函数     
   
    相对于短信的发送函数而言,短信的接收相当简单,只需要以下的三行代码就完成了。但是它使用的技术却决不比短信的发送少,这里主要用到了Mscomm控件的Output属性和AT+CMGR指令。     
   
    Public   Sub   readsms(rnum   As   String)    
    mobcomm.Output   =   "AT+CMGF=1"   +   vbCr    
    mobcomm.Output   =   "AT+CMGR="   &   rnum   +   vbCr    
    End   Sub     
  Top

9 楼yk84(好人(专蹭百分贴))回复于 2004-09-03 18:12:04 得分 0

嗯.百分贴,我不会,蹭下分Top

10 楼admin0594(无巧不成书)回复于 2004-09-03 18:26:33 得分 0

m_Ports.WriteToPort("AT+CMGS=\"135********\"   \r");  
  执行后要等应答后才能执行语句m_Ports.WriteToPort(buffer);//把短信发出去  
  因为你是异步访问串口的  
   
  以下是我的代码片断,绝对能够解决你的问题,因为我也是用的该CSerialPort类;  
  void   CServiceModule::OnCommunication(WPARAM   ch,   LPARAM   port)  
  {  
  m_szReceive   +=   (char)ch;  
  if(m_szReceive.Find(_T("\r\n>   "))   !=   -1   ||    
  m_szReceive.Find(_T("\r\nOK\r\n"))   !=   -1   ||    
  m_szReceive.Find(_T("\r\nERROR\r\n"))   !=   -1)  
  {  
  switch(m_eOpType)  
  {  
  case   eSMReceive: //收取短信  
  DoRecv();  
  break;  
   
  case   eSMDelete: //删除短信  
  DoDelete();  
  break;  
  case   eSMSend: //发送短信  
  DoSend();  
  break;  
  }  
  m_szReceive.Empty();  
  }  
  }  
  Top

11 楼renjunjun(飞黄)回复于 2004-09-03 18:34:01 得分 0

哇,收藏Top

12 楼zhangzumiao(梦里水香)回复于 2004-09-03 21:13:22 得分 0

你发出去应该有回应呀。怎么要你自己来看怎么有没有发出去呢。!  
           
            应该是对方的问题。  
           
                              这样说实在是太愚蠢了。   每一个手机都需要的功能。!!1Top

13 楼tangbq(梦梅书生)回复于 2004-09-06 09:40:49 得分 0

发送:AT+CMGF=1  
  返回:OK  
   
  发送:AT+CMGS=13552180240  
  返回:>  
   
  发送:>Hello   Test<Ctrl+Z>  
  返回:OK  
  Top

14 楼wycwyc(.net老菜)回复于 2004-09-06 14:02:35 得分 0

大家还有什么好意见??Top

15 楼wycking(讨)回复于 2004-09-06 15:23:41 得分 0

gzTop

16 楼ryuginka(一米八五的猪)回复于 2004-09-13 11:26:25 得分 0

我最近也要搞这个.学习Top

17 楼zmrok(朱朱)回复于 2004-09-14 09:31:39 得分 0

学习Top

相关问题

  • 有谁做过WAVECOM模块的中文短信发送?SOS
  • OA系统中的短信发送模块求助
  • 求cdma模块短信发送的例子
  • CMS91模块无法发中文短信问题
  • 关于用wavecom模块连接com口发送短信的问题???
  • 有没有办法直接操作手机的GSM模块?进行发短信!
  • PC串口连手机模块发送短信(用MSComm控件)给分100
  • 使用CDMA手机模块WaveCom公司的Q2358c模块,使用Spcomm连接PC串口,收发短信的问题,大侠请进
  • 使用CDMA手机模块WaveCom公司的Q2358c模块,使用Spcomm连接PC串口,收发短信的问题,大侠请进来帮忙
  • 问 GSM 模块开发时,短信息最长可以多长,费用是否和手机短信一样?

关键词

  • 函数
  • 指令
  • sms
  • 手机
  • 控件
  • pocket
  • ascg
  • longtobytes
  • lshex
  • mobcomm

得分解答快速导航

  • 帖主:wycwyc

相关链接

  • Visual Basic类图书
  • Visual Basic类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo