请解释一下在计算机上用软件发送短消息的原理(如QQ软件)以及可行的实现方式。

解决方案 »

  1.   

    发送 ICQ 通知原著:  Thomas nielsen
    问题提出/摘要:
    你曾经想过在你的应用程序中包含向一个 ICQ 客户发送一个通知吗?下面就有做法: 
     回答:
      {下面的代码不能解析 wwp.mirabilis.com 的主机名,它直接使用对应的 IP。
      (译者注:其实这只要用 HostByName 函数就可以解决。)} 
      unit unitICQPage; 
      
      interface 
      
      uses 
        Windows, Classes, SysUtils,  Winsock; 
      
      Function ICQPage(dwUIN: DWORD; szFrom, szFromEmail, szSubject, szMsg: String): Integer; 
      
      
      
      implementation 
      
      
      Function ICQPage(dwUIN: DWORD; szFrom, szFromEmail, szSubject, szMsg: String): Integer; 
      {This procedure sends an ICQ page. 
      It uses a raw winsock interface to do this 
      
      Return values: 
         0 = success 
         1 = WSA Error   (WSAGetLastError) 
      } 
      Const 
        ERR_SUCCESS = 0; 
        ERR_WSA = 1; 
      Var 
         MyWSA: WSAData; 
         SIN: TSockAddr; 
         hSocket: TSocket; 
         sRequest: String; 
      Begin 
      
        If WSAStartup(MakeWord(1,1), MyWSA) <> 0 Then Begin 
          //There's nothing to do, it failed! 
          ICQPage := ERR_WSA; //ERROR CODE 
          WSACleanup; 
          Exit; 
        end; 
      
        hSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); 
        If hSocket = INVALID_SOCKET Then Begin 
          //Unable to create socket :( 
          ICQPage := ERR_WSA; 
          WSACleanup; 
          Exit; 
        End; 
      
        {Setup "target" information} 
        SIN.sin_family := AF_INET; 
        SIN.sin_port := htons(80); //Port 80 is default HTTP (And ofcource the one mirabilis use} 
        {NOTE: The hostname wwp.mirabilis.com should be resolved in code} 
      //  SIN.sin_addr.S_addr := inet_addr(PChar('127.0.0.1')); 
         SIN.sin_addr.S_addr := inet_addr(PChar('205.188.252.120')); 
      
        If connect(hSocket, SIN, SizeOf(SIN)) = SOCKET_ERROR Then Begin 
          //Error while connecting... 
          {Hmm, Now the program should attempt to resolve the hostname wwp.mirabilis.com 
          and attempt to reconnect to that IP 
          But since I do not know how to resolve hostnames:} 
          ICQPage := ERR_WSA; 
          CloseSocket(hSocket); 
          WSACleanup; 
          Exit; 
        end; 
      
        //The socket has connected! 
        Sleep(30); //dunno, I just feel like it ;-) 
      
        sRequest := 'from='+szFrom+'&'+ 
                    'fromemail='+szFromEmail+'&'+ 
                    'subject='+szSubject+'&'+ 
                    'body='+szMsg+'&'+ 
                    'to='+IntToStr(dwUIN)+ 
                    '&Send=Send+Message'; 
      
        sRequest := 'POST /scripts/WWPMsg.dll HTTP/1.1'+#13#10+ 
                    'Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/msword, */*'+#13#10+ 
                    'Accept-Language: en'+#13#10+ 
                    'Content-Type: application/x-www-form-urlencoded'+#13#10+ 
                    'Accept-Encoding: gzip, deflate'+#13#10+ 
                    'User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows 98)'+#13#10+ 
                    'Host: 127.0.0.1'+#13#10+ 
                    'Content-Length: '+IntToStr(Length(sRequest))+#13#10+ 
                    'Connection: Keep-Alive'+#13#10+ 
                    ''+#13#10+ 
                    sRequest; 
      
      
        If Send(hSocket, sRequest[1], Length(sRequest), 0) = SOCKET_ERROR Then Begin 
          //unable to send 
          ICQPage := ERR_WSA; 
          CloseSocket(hSocket); 
          WSACleanup; 
          Exit; 
        End; 
      
        //Page sent! 
      
        CloseSocket(hSocket); 
        WSACleanup; 
        ICQPage := ERR_SUCCESS; 
      end; //ICQPage 
      
      
      end.
      

  2.   

    1、首先你的有移动或联通给你的sp号,也就是你自己是sp商家2、按照CMPP或SPIP写SP网关,使该网关与移动网关(如亚信网关)或联通网关连接上3、按照你自己定义的协议写一个发送短信的客户端(类似qq的东东)短信发送的过程是:在客户端编辑短信—>(走内部协议)到SP网关—>(走CMPP h或SPIP)到联通或移动网关—>(走SMPP)到短信中心—>到手机如果你想详细了解这方面的东东,网址:http://skybird.9s9s.com
      

  3.   

    to loopyifly(深情咸鱼) :
       我不是sp商家,只是有一个项目,用户要求有发送短信的功能
    还有没有其它的解决办法?
      

  4.   

    to mubaosen(小楼一夜听春雨) :    你没有可连接的网关(亚信等网关)你靠什么通道来发送短信?要么你挂靠别的SP厂家的SP网关(即寻求合作伙伴),让他给你分配一个端口以及提供他们内部的协议。    我前段时间就是在写这些东西,已经开始运营了。
      

  5.   

    to loopyifly(深情咸鱼):
        我想通过一个sp作为中间厂商来进行,能给提供几个sp吗?
      

  6.   

    这个你应该到
    skybird.9s9s.com上发帖子询问应该是很多的
      

  7.   

    你到新浪或者163去申请一个发短信的账号,然后你通过http协议用这个账号发短信就ok了
      

  8.   

    买个GSM模块,用AT命令发不行么?
      

  9.   

    to  phoenixsoft(似水流年) :
        GSM模块是不是连接到串口再接到手机上的设备,如果不是请详细一点说明好吗,大概有多少费用
      

  10.   

    to hyryxgs(菜鸟) :
       对方的网页变了就不好办了,但也是个解决办法,有没有相关的例子?
      

  11.   

    帮你UP
    顺便抢眼球
    http://expert.csdn.net/Expert/topic/1368/1368166.xml?temp=.1853754
      

  12.   

    市场上有手机到电脑的连接线买,有usb、rs232等接口。然后自己写个简单的串口控制程序就得了。
      

  13.   

    我们用的GSM/GPRS模块,用AT指令控制模块来发送短消息(RS232)!(GPRS是走的网络,UDP协议),模块是国产的!价格在2000出头!!!
      

  14.   

    向网络供应商申请一个SP接入号;
    按照CMPP或SPIP写SP网关,使该网关与移动网关(如亚信网关)或联通网关连接上
    或者是要一个动态连接库
    然后就搞定
      

  15.   

    http://expert.csdn.net/Expert/topic/1339/1339890.xml?temp=.2899744
      

  16.   

    to qfpcn(天外飞仙) :
       直接向移动申请网关不太容易,而且费用较高hhuangchunlin(林之韵):
       你说的网络供应商是指哪一种,中国移动还是第三方?
      

  17.   

    一,到搜狐申请个帐号,然后用http协议,当然,要分析其网页发送的消息包还有汉字解码之类的,这个我就成功的编写过,并免费发送过一段时间,后来功能不断完善我也舍不得将代码发给别人了,呵呵。
    二,用gsmmodem,或者直接找个手机通过数据线连接到电脑上,然后用at命令就ok了。费用都在2000以内。