誰能告訴我有關寫代碼發短信問題
手機號為:+8613612345678
服務中心號:+8613800755500
發送短信內容:中
發送格式:
AT+CMGS=17<回車,ASCII為13>
addr+phone+<^Z>+換行回車<13和10>
發出的內容為:
AT+CMGS=17<回車>0891683108705505F011000D91683116325476F8000800024E2D^Z換行回車

解决方案 »

  1.   

    你可以用COM口,因为现在手机连接上电脑之后都会虚拟一个COM口,直接向COM口发送消息即可。
    具体发送消息的格式网上有。Telnet也能连上手机。
      

  2.   

    一个C++的短信发送函数:
    bool TFrmMain::SenD(int aComm, AnsiString TeleNo, AnsiString ShowText)
    ///////////////////////////////////////////////////////////////
    // 名称:短信发送函数;
    // 功能:把ShowText通过aComm串口发送到 TeleNo手机上 ,循环nTry次
    // 参数:aComm串口号,TeleNo接收方手机号码,ShowText发送内容
    // 返回值:返回True表示发送成功,反之发送失败
    ////////////////////////////////////////////////////////////////
    {
      AnsiString StrTeleNo,No1,No2,Str,No;
      int iT;
      AnsiString ShortTextHex,ShortTextLen,ShortTextLenHex,Str1;
      int i, j, k,n;
      wchar_t ShortTextA[2048];
      TMSComm *MSComm = NULL;
      bool Result = false;
      try
      { 
          StrTeleNo = "";
          for (iT = 1; iT < TeleNo.Length(); iT++)
          {
            if (iT % 2 == 0)
            {
              Str = RightStr(MidStr(TeleNo,1,iT), 2);
              No1 = RightStr(Str, 1);
              No2 = LeftStr(Str, 1);
              No = No1 + No2;
              StrTeleNo = StrTeleNo + No ;
            }
          }
          StrTeleNo = StrTeleNo + "F" + RightStr(TeleNo,1);  //================处理短信内容,字符串转换成Unicode
        memset(ShortTextA, 0, 2048);
        StringToWideChar(ShowText, ShortTextA, ShowText.Length());
        ShortTextHex = "" ;
        i = 0;
        char strtemp[100];
        while ((ShortTextA[i] != '\0'))
        {
          j = (int)ShortTextA[i];
          memset(strtemp, 0, 100);           //k * 0x100 + j + 0x10000
          sprintf(strtemp, "%4.4X", j);
          ShortTextHex = ShortTextHex + strtemp;
          i++;
        }
        i *=2;
        if ((i-1) < 140) //处理要发送文本的长度
        {
          ShortTextLenHex= IntToHex(i,2);
        }
        else
        {
          ShortTextLenHex = '8C';
        }
        ShortTextLen = IntToStr(i + 15);
      //===========发送信息
        MSComm = new TMSComm(this);
        MSComm->CommPort = aComm;
        MSComm->Settings = StrPaut + ",n,8,1";
        MSComm->OutBufferSize = 1024 ;
        MSComm->OutBufferCount = 0;
        MSComm->InputLen = 0 ;
        if (MSComm->RTSEnable)
          MSComm->RTSEnable = false ;
        if (MSComm->PortOpen)
          MSComm->PortOpen = false ;
        MSComm->RTSEnable =true;
        MSComm->PortOpen = true;     
        AnsiString StrTemp = "AT\rAT+CNMI=2,2\rAT+CMGF=0\r";
        memset(ShortTextA, 0, 2048);
        MSComm->Output = StrTemp ;
        Application->ProcessMessages();
        StrTemp = "AT+CMGS=" + ShortTextLen + "\r0011000D9168" + StrTeleNo + "000801" + ShortTextLenHex + ShortTextHex + "\x01A";
        memset(ShortTextA, 0, 2048);
        MSComm->Output = StrTemp;
        Sleep(3000);
        MSComm->Update();
        Sleep(500);
        MSComm->RTSEnable = false;
        MSComm->PortOpen = false;
        Result = true;      
      }
      catch(...){}
      Sleep(1500);
      if(MSComm != NULL) delete MSComm;
      return Result;
    }