我有资料.不过,你一样可以在网上查出来.发送短消息有很多种方法.第一:控制手机,第二:控制GSM模块,第三:通过短消息网关,不知道你说的Mobile是什么意思.在GSM协议中.有MT,ME,不知道你说的究竟是什么,说清楚点.

解决方案 »

  1.   

    to hegum:谢谢你!
    我知道你的方法,但我不是通过网络来发的,我是通过手机数据线来发送的!
      

  2.   

    谢谢你们的回复!我是用手机数据线来发送的,例如用我的PC连好了NOKIA6110的数据线,通过COM1来连接,我察过资料,我的想法是,先用CREATEFILE创建连接,然后用WRITEFILE来传送我的消息,nokia的手机大部分都支持TEXT的格式,是吧,例如,我在EDIT中输入:’AT ?‘
    然后用WRITEFILE向COM1发送数据,这样可以吗?如果可以,拿我怎么接收它的返回信息呢?(显示在MEON1)上。
    同时,你是否可以给我你的QQ号,和EMAIL,我可以更好的和你联系!
    我的QQ是(10739201),EMAIL 是:[email protected]
    期望你的回复! 
    多谢了!十分感激!
      

  3.   

    1.去查阅AT命令集+GSM0707协议+GSM0705协议.
    2.从手机制造商哪里下载软件.
      

  4.   

    根据AT命令集.没有"AT?"这个命令.(但是不知道NOKIA有没有).
    标准的text文本发送模式
    发送
    at+cmgs="+86(手机号码)"+#13+#10返回
    >发送
    消息内容返回
    +CMGS [发送标号]
    OK至于接收.你用的应该是Comm控件吧,当ReceiveCount>0的时候,缓冲区有数据,
    用Input的方法就可以读出来了.
      

  5.   

    to (deathcat):
    谢谢!
    我还想知道用PDU格式发送时,必须把AT命令转化成16进制的数吗?该怎么转换?
      

  6.   

    to hegum(大概) :程序好像不行哦。总是在SoapClient.SendTextMessage(’Number’, ’MessageBody’, ’Sender’);这一句报OLE错误。
      

  7.   

    wind8bell(风之铃)
    哦,不好意思,我是看到的啊:(
      

  8.   

    gordon9673 (gody) 
    这个好象可以啊
    http://www.yiwant.com/download1.htm
    电脑连接手机收发短消息的二次开发工具,包括一个实现短消息收发功能的DLL、函数说明和一个DELPH程序源代码。
    www.yiwant.com/cgi-bin/click.cgi?job=down&filename=sms-delphi
    部分程序:
    mplementation{$R *.DFM}
    //=============DLL 函数调用声明 开始 =========
        procedure ConnectToMobile;stdcall; external 'SMSLIB.DLL';
        procedure DisconnectToMobile;stdcall; external 'SMSLIB.DLL';
        Function  IsConnected:boolean;stdcall; external 'SMSLIB.DLL';
        Function  IsBusy:boolean;stdcall; external 'SMSLIB.DLL';
        procedure InitMobile;stdcall; external 'SMSLIB.DLL';
        procedure SetSMC(SMC:PChar);stdcall; external 'SMSLIB.DLL';
        Function SendSMS(phone,text:PChar):boolean;stdcall; external 'SMSLIB.DLL';
        Function ReadSMS(Text,sendnum,smc,time:PChar):boolean;stdcall; external 'SMSLIB.DLL';
    //=============DLL 函数调用声明 结束 =========procedure TForm1.Button1Click(Sender: TObject);
    begin
        ConnectToMobile;
        memo2.Lines.Add ('已经发出连接命令。');
        sleep(4000);     //等待4秒,等待手机准备好
        while not IsConnected do ;  //直到连接成功    memo2.Lines.Add ('已经连接到手机。');
        InitMobile;
        memo2.Lines.Add ('已经初始化。');
        SetSMC(PChar(SMC.Text ));
        memo2.Lines.Add ('短信中心设置成功。');end;
      

  9.   

    使用pdu格式可以啊。
    at+cmgf=0  ----使用pdu模式
    at+cmgf=1  ----使用text模式
    但是,你首先要看nokia的手机是否支持pdu格式。
    不过,我想应该是支持的。
    因为text模式不支持中文短消息。你要先查查pdu格式手册,每一个短信中心的pdu格式不是很一致的。
    没有必要做什么16进制的转换啊。如果发送中文,那么用的是uc2码。比如说发送给手机号码为123456789ab的手机发送1234。那么pdu格式应该是
    0891683108200905f011000b816821436587a9fb0004+短信息内容长度(16进制)+短信息内容
      

  10.   

    to deathcat
    对不起!
    0891683108200905f011000b816821436587a9fb0004,是什么意思,是PDU的标准格式吗?
    同时,我想问一下,INPUT怎么用,麻烦你说一下好吗?
      

  11.   

    to hegum(大概) :
    你给我的网址可以用吗?
      

  12.   

    以下是我用spcomm作的代码,输入手机号码,信息内容,点发送按钮.
    procedure Tform1.BitBtn1Click(Sender: TObject);
    var i:integer;
    begin
    ContentCode:='';
    phone:=edit1.Text; 
    phonecode:='';
    if length(phone)<>11 then
     begin
      showmessage ('输入号码不对');
      comm1.StopComm ;
      exit;
     end;
     phonecode:=phone[2]+phone[1]+phone[4]+
       phone[3]+phone[6]+phone[5]+phone[8]+phone[7]+
       phone[10]+phone[9]+'f'+phone[11];
     //showmessage(phonecode);
     content:=memo1.Text;
     for i:=1 to length(content) do
     ContentCode:=ContentCode+inttohex(ord(content[i]),4); textlen:=inttohex(length(content)*2,2);
     SCA:='0891683108702705f0';  //短信中心号码13800772500
     TPDU:='11000D9168'+phonecode+'000800'+textlen+contentcode;
     //showmessage(SCA+TPDU);
     pdulength:=inttostr(length(TPDU) div 2);
     ATCOMM:='at+cmgs='+pdulength+chr(13)+chr(10);
     //showmessage(atcomm);
     i:=LENGTH(ATCOMM);
     //sleep(20);
     //SHOWmessage(inttostr(i));
       comm1.WriteCommData (pchar(ATCOMM),i) ;
       ATCOMM2:=SCA+TPDU+chr(26);
       comm1.WriteCommData (pchar(ATCOMM2),length(ATCOMM2));
    end;你要改写短信中心号码,改为当地的号码.
    这是用pdu方式发送中文。
      

  13.   

    input是mscomm控件的属性。用
    mscomm来控制串口。windflow(飘) 的代码可以借鉴一下。
    当然,你首先要搞清楚你们那里短信息 中心的号码。不过,要搞清楚pdu格式,可不是一天两天就可以搞ok的。建议你还是先看Text模式吧。
      

  14.   

    to deathcat对不起!
    windflow? 是什么?怎样参考?
    mscomm 控件在哪儿可以找到?
    同时,我想问一下,你哪儿有GSM的第三方控件吗?如果有,给我发一个好吗?
    或者,告诉我哪儿可以下载到?
    谢谢了!
      

  15.   

    对不起!
    我错把windflow当成是控件了!
    在此对windflow说对不起了!
      

  16.   

    to windflow:
    谢谢你的回复!
    同时我想问一下,你是怎样接收手机发送的返回信息的呢?以及怎样把它显示在memo1上!
    谢谢了!
      

  17.   

    以下代码可以实现:
    procedure Tform1.Comm1ReceiveData(Sender: TObject; Buffer: Pointer;
      BufferLength: Word);
    var i:integer;reback:array [1..1024] of byte;
        viewstring:string;
    begin
      for  i:=1 to 1024 do reback[i]:=$00;
      memo1.Clear ;
      viewstring:='';
      move(buffer^,reback,bufferlength);
      for i:=1 to bufferlength do viewstring:=viewstring+chr(reback[i]);
      memo1.Lines.Add (viewstring);
      
    end;
      

  18.   

    读取GSM模块中存储的第一条信息:
    var s:string;
    s:='at+cmgr=1'+chr($0d)+chr($0a);
    comm1.WriteCommData(pchar(s),length(s));
    comm1是spcomm控件的实例。
    在spcomm的事件中用上面的代码.
      

  19.   

    To windflow , deathcat and every body!
    谢谢你们的回复!
    帮我解决了许多问题!
    真的很感谢你们!
    好人一生平安!
      

  20.   

    你好!
    我现在又遇到了一个问题,关于SMS的,请帮我一下,我开个贴子给你加100分。
    我如何才能知道,串口(COM1)已经和手机数据线连上了呢?
    同时我也很希望和你交个朋友。我的QQ是:10739201!
    期待你的回复!
    谢谢!