国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

用VB6.0編寫手機(jī)短信發(fā)送

2019-11-18 17:28:52
字體:
供稿:網(wǎng)友
因?yàn)槭謾C(jī)短消息的發(fā)送是以PDU串的形式發(fā)送出去的,中文字符以Unicode碼來表示,所以在發(fā)送中文短消息之前必須首先將中文字符轉(zhuǎn)換為Unicode碼,下面的函數(shù)將實(shí)現(xiàn)這個功能。這個函數(shù)主要應(yīng)用到VB自帶的一個格式轉(zhuǎn)換函數(shù):ChrW()將中文轉(zhuǎn)換為Unicode碼。 

  PublicFunctionchg(rmsgAsString)AsString
  DimtepAsString
  DimtempAsString
  DimiAsInteger
  DimbAsInteger
  tep=rmsg
  i=Len(tep)
  b=i/4
  Ifi=b*4Then
  b=b-1
  tep=Left(tep,b*4)
  Else
  tep=Left(tep,b*4)
  EndIf
  chg=""
  Fori=1Tob
  temp="&H"&Mid(tep,(i-1)*4 1,4)
  chg=chg&ChrW(CInt(Val(temp)))
  Nexti
  EndFunction


  同上,為了發(fā)送以PDU模式發(fā)送短消息,必須將手機(jī)號碼和對方手機(jī)號碼也轉(zhuǎn)換為PDU格式,下面的函數(shù)就是為了實(shí)現(xiàn)這種轉(zhuǎn)換: 

  PublicFunctiontelc(numAsString)AsString
  DimtlAsInteger
  Dimltem,rtem,ttemAsString
  DimtiAsInteger
  ttem=""
  tl=Len(num)
  Iftl<>11Andtl<>13Then
  MsgBox"wrongnumber."&tl
  ExitFunction
  EndIf
  Iftl=11Then
  tl=tl 2
  num="86"&num
  EndIf
  Forti=1TotlStep2
  ltem=Mid(num,ti,1)
  rtem=Mid(num,ti 1,1)
  Ifti=tlThenrtem="F"
  ttem=ttem&rtem&ltem
  Nextti
  telc=ttem
  EndFunction  

  手機(jī)號碼有兩種表示方法:11位和13位(帶國家碼86),一般手機(jī)發(fā)送時都是以13位形式表示的,所以以上的函數(shù)還有一個功能是自動將11位格式手機(jī)號碼轉(zhuǎn)換為13位形式,然后再轉(zhuǎn)換為PDU串。


  手機(jī)短信的發(fā)送主要借助于VB的Mscomm控件實(shí)現(xiàn),關(guān)于Mscomm控件,前面的技術(shù)介紹部分有詳細(xì)介紹。短信的發(fā)送是由AT CMGS指令完成的,采用PDU模式發(fā)送,函數(shù)代碼如下:

  ConstPRex="0891"
  Constmidx="11000D91"
  Constsufx="000800"
  PublicFunctionSendsms(cscaAsString,numAsString,msgAsString)As_Boolean
  Dimpdu,psmsc,pnum,pmsgAsString
  DimlengAsString
  DimlengthAsInteger
  length=Len(msg)
  length=2*length
  leng=Hex(length)
  Iflength<16Thenleng="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
  EndFunction  

  因?yàn)槭謾C(jī)同一時間只能處理一件事情,因此這個函數(shù)只負(fù)責(zé)發(fā)送短信,關(guān)于短信發(fā)送成功與否以及閱讀短信的部分集中在一起處理。判斷手機(jī)短信發(fā)送成功與否主要由AT CMGS命令執(zhí)行以后的返回碼來決定(可參見前文的AT指令介紹部分)。

  為了防止手機(jī)因過于繁忙而出錯,這里采取了一定的方法讓手機(jī)有充分的時間處理發(fā)送和接收及刪除等操作。Sleep()函數(shù)正是為此而設(shè)計(jì)的,在發(fā)送及刪除操作后都會讓程序暫停一秒,這樣就不至于使得手機(jī)過于繁忙。


  Unicode碼解碼函數(shù)  

  相比于手機(jī)短信的發(fā)送而言,手機(jī)短信的接收主要的工作正好與之相反。手機(jī)短信的發(fā)送需要將待發(fā)送的短信內(nèi)容轉(zhuǎn)換為Unicode碼,而短信的接收則需要將接收到的Unicode碼轉(zhuǎn)換成中文字符。下面的函數(shù)將實(shí)現(xiàn)解碼功能。同手機(jī)短信發(fā)送的編碼函數(shù)一樣,這里也應(yīng)用了一個VB內(nèi)置的函數(shù)AscW()函數(shù)來將Unicode碼轉(zhuǎn)換為中文:

  PublicFunctionascg(smsgAsString)AsString
  Dimsi,sbAsInteger
  DimstmpAsInteger
  DimstempAsString
  sb=Len(smsg)
  ascg=""
  Forsi=1Tosb
  stmp=AscW(Mid(smsg,si,1))
  IfAbs(stmp)<127Then
  stemp="00"&Hex(stmp)
  Else
  stemp=Hex(stmp)
  EndIf
  ascg=ascg&stemp
  Nextsi
  ascg=Trim(ascg)
  EndFunction 

  2手機(jī)短信接收函數(shù) 

  相對于短信的發(fā)送函數(shù)而言,短信的接收相當(dāng)簡單,只需要以下的三行代碼就完成了。但是它使用的技術(shù)卻決不比短信的發(fā)送少,這里主要用到了Mscomm控件的Output屬性和AT CMGR指令。 

  PublicSubreadsms(rnumAsString)
  mobcomm.Output="AT CMGF=1" vbCr
  mobcomm.Output="AT CMGR="&rnum vbCr
  EndSub

->


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宁河县| 孟村| 三台县| 衡阳市| 汉源县| 自贡市| 渑池县| 万盛区| 城步| 阿鲁科尔沁旗| 盈江县| 昭觉县| 吐鲁番市| 富川| 遵义市| 梅河口市| 广德县| 洪江市| 夏邑县| 磐石市| 静宁县| 理塘县| 迁西县| 长宁县| 永济市| 平舆县| 鲁甸县| 门头沟区| 鸡东县| 扬州市| 饶平县| 凤庆县| 枣庄市| 龙南县| 玉环县| 台湾省| 尉氏县| 昌都县| 金阳县| 博兴县| 三门峡市|