谁有DELPHI写的收发短信的简单例子,1500分外加一个香吻!:)(300分)

  • 主题发起人 主题发起人 qshd
  • 开始时间 开始时间
Q

qshd

Unregistered / Unconfirmed
GUEST, unregistred user!
[:)]我用DELPHI写了一个收发短信(移动的CMPP协议)的小程序,可是总是无法和网关模拟器连接,谁能帮助我,将感激不尽!
谢谢!
 
先kiss:)然后给例子!
r u really a gir??:)
 
给你一个了!给我分哟!
发送短信需要短消息网关程序,一般由 移动公司或联通公司提供。
下面是 免费短消息HTM页。
<form name='form' method="post" action="http://javanow.net/free/index.php?go=send">
<b>短信内容</b>:<INPUT NAME='Content' SIZE='40' MAXLENGTH='50'> <br>
<font color=red>短消息中请不要加空格,否则无法正确发送</font><br>
<b>手机号码</b>:<INPUT NAME='Phone' SIZE='20' MAXLENGTH='11'> <br>
<INPUT NAME='jixing' value="手机" type=hidden> <br>
<INPUT Type="button" VALUE=" 发 送"><br>
</form>




 
www.e21.edu.cn
我要在网上实现短信的收发,这不够用!不过谢谢!
 
提一下。
 
代码:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ScktComp, StdCtrls, jpeg, ExtCtrls, ComCtrls;

type
  TForm1 = class(TForm)
    ClientSocket1: TClientSocket;
    Edit1: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Edit3: TEdit;
    Label3: TLabel;
    Button3: TButton;
    StatusBar1: TStatusBar;
    Memo1: TMemo;
    Button4: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure ServerSocket1ClientConnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ClientDisconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1Listen(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ServerSocket1ThreadStart(Sender: TObject;
      Thread: TServerClientThread);
    procedure ServerSocket1ThreadEnd(Sender: TObject;
      Thread: TServerClientThread);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure Button4Click(Sender: TObject);
    procedure ClientSocket1Connecting(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Disconnect(Sender: TObject;
      Socket: TCustomWinSocket);
    procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
      ErrorEvent: TErrorEvent; var ErrorCode: Integer);
    procedure ClientSocket1Write(Sender: TObject;
      Socket: TCustomWinSocket);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

 type cmpp_connect=record
    //  total_length:Longword;
    //  command_id:Longword;
    //  sequence_id:Longword;
      source_addr:array[0..5]of char;
      authenticatorSP:array[0..31]of char;
      version:byte;
      timestamp:longword;
 end;


var
  Form1: TForm1;
    MS: TMemoryStream;
implementation

{$R *.dfm}


procedure TForm1.Button1Click(Sender: TObject);
begin
if clientsocket1.active then
begin
clientsocket1.active:=false;
end;

clientsocket1.Port:=strtoint(edit2.text);
clientsocket1.address:=edit1.Text;
try
   clientsocket1.Active:=true;
   except
   showmessage('连接出错!');
end
end;

procedure TForm1.Button2Click(Sender: TObject);
var cmpp_conn:cmpp_connect;
var str:string;
begin
//cmpp_conn.total_length:=35;
//cmpp_conn.command_id:=1;
//cmpp_conn.sequence_id:=1;
cmpp_conn.source_addr:='000168';
cmpp_conn.AuthenticatorSP :='758e018e918a49cc2ab0d245847a7105';
cmpp_conn.version:=1;
cmpp_conn.timestamp:=0428111700;

clientsocket1.Socket.SendBuf(cmpp_conn,sizeof(cmpp_conn));
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
if clientsocket1.active then
begin
clientsocket1.Socket.Disconnect(1);
clientsocket1.active:=false;
end;
end;

procedure TForm1.ServerSocket1ClientConnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
statusbar1.SimpleText:='有信息返回!';
end;

procedure TForm1.ServerSocket1ClientDisconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
statusbar1.SimpleText:='连接被断开!';
end;

procedure TForm1.ServerSocket1Listen(Sender: TObject;
  Socket: TCustomWinSocket);
begin
statusbar1.SimpleText:='正在监听'+edit2.text;
end;

procedure TForm1.ServerSocket1ThreadStart(Sender: TObject;
  Thread: TServerClientThread);
begin
statusbar1.SimpleText:='监听开始、、、、';
end;

procedure TForm1.ServerSocket1ThreadEnd(Sender: TObject;
  Thread: TServerClientThread);
begin
statusbar1.SimpleText:='监听结束、、、';
end;


procedure TForm1.ClientSocket1Read(Sender: TObject;
  Socket: TCustomWinSocket);
var cmpp_conn2:cmpp_connect;
var re_str:string;
begin
statusbar1.SimpleText:='有数据返回!';
socket.ReceiveBuf(cmpp_conn2,37);
re_str:=socket.ReceiveText;
memo1.Lines.Add('command_id:'+inttostr(cmpp_conn2.command_id));
memo1.Lines.Add('authenticatorsp:'+cmpp_conn2.authenticatorsp);
memo1.Lines.Add('source_addr:'+cmpp_conn2.source_addr);
memo1.Lines.Add('timestamp:'+inttostr(cmpp_conn2.timestamp));
memo1.Lines.Add('-------------------------------');
memo1.lines.add(re_str);
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
memo1.Lines.Text:='';
end;

procedure TForm1.ClientSocket1Connecting(Sender: TObject;
  Socket: TCustomWinSocket);
begin
statusbar1.SimpleText:='SOCKET 连接成功!';
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
  Socket: TCustomWinSocket);
begin
statusbar1.SimpleText:='SOCKET 连接被断开!';
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
  Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
  var ErrorCode: Integer);
begin
statusbar1.SimpleText:='SOCKET 连接错误!';
end;

procedure TForm1.ClientSocket1Write(Sender: TObject;
  Socket: TCustomWinSocket);
begin
statusbar1.SimpleText:='正在尝试发送数据!';
end;

end.
 
这个程序有问题,
1、cmpp_conn.AuthenticatorSP 必须是用MD5加密后的字串
2、cmpp_conn.AuthenticatorSP 是16位的,MD5返回的值怎么赋给16位的数组!

 
示网关而定,很多网关都使用IP而不使用AuthenticatorSP来进行验证!
如果你遇到的是这种网关那么你可以不用管它!

另外似乎CONNECT只有在长连接中才有效!短连接根本用不到!
 
还有重要一点:你的机器可以连接那些网关接口么?因为不是任何机器都可以的
不是他们电信的短信中心的客户是没有权限的
 
hubadog的宝典里面有一个[:)]
 
千万别吻。
 
注意网络字字序列问题
MD5加密/还有发UNICODE有顺序问题
呵 ̄ ̄ ̄ 建议

名 称:支持短信协议互转网关程序(For NT) 并提供业务开发包及 业务生成工具
作 用:总之从无到到有实现与移动联通连接并提供诸如移动聊天,股票查询之类的服务
只需1天时间(可以编程控制业务流程)
运行环境:WINNT/2000 (For UNIX/Linux 正在开发中 ) 提供unix/linux 下JAVA接口
产品说明:可以提供 短信网关、短信业务生成器,短信客户端
用户控制:支持多用户接入及子号码分配,可以控制每个用户发送量
连 接:可以直接连接移动,联通及LOGICA,华为,傲天,英斯克,北伟
东大NOKIA,清华声讯网关
支持 SMPP/SGIP/CMPP 之间互转
详细联系:请邮件 netbabys@21cn.com
QQ 2412932 加入时请注明 短信字样

还提供超强客户端软件(可以OEM)呵~中国网友短信软件评比第一
客户端软件可以去 sms.1288.net
sms.czinfo.net 下载

具体流程是
聊天 ---/
股票查询--/
新闻定制--->应用业务---/
  客户端软件-->>-TKTRANS--->>移动或是联通网关--->>用户手机
网站 -----/
 
unit CMPP_12;

interface

uses SysUtils,Windows, Classes,syncobjs ,activex,
Messages,forms,FileCtrl,winsock,Dialogs;


const
{*************************************************************
function: CMPP头结构
date: 2001/6/1
created: jibin 2002.04.11
*************************************************************}
MAX_SUBMIT = 16 ; ///*接收窗口大小 */
// define CMPP12 919 constant command
CMPP12_CONNECT = $00000001 ;
CMPP12_CONNECT_REP = $80000001 ;
CMPP12_TERMINATE = $00000002 ;
CMPP12_TERMINATE_REP = $80000002 ;
CMPP12_SUBMIT = $00000004 ;
CMPP12_SUBMIT_REP = $80000004 ;
CMPP12_DELIVER = $00000005 ;
CMPP12_DELIVER_REP = $80000005 ;
CMPP12_QUERY = $00000006 ;
CMPP12_QUERY_REP = $80000006 ;
CMPP12_CANCEL = $00000007 ;
CMPP12_CANCEL_REP = $80000007 ;
CMPP12_ACTIVE_TEST = $00000008 ;
CMPP12_ACTIVE_TEST_REP = $80000008 ;
CMPP12_FWD = $00000009 ;
CMPP12_FWD_REP = $80000009 ;
CMPP12_ROUTE = $00000003 ;
CMPP12_ROUTE_REP = $80000003 ;

Err_Sokcet_Fail = $0000000A ;
Err_Login_Fail = $0000000B ;
Err_Version_Fail = $0000000C ;
Err_Ip_Fail = $0000000D ;
Err_Fulx_Limit = $0000000E ;
Err_AscBinFail = $00000010 ;

Err_Icp_ID_Fail = $00000011 ;
Err_Pk_Total_Fail = $00000012 ;
Err_Pk_Number_Fail = $00000013 ;
Err_ARegistered_Delivery_Fail= $00000014 ;
Err_AMsg_Level_Fail = $00000015 ;
Err_AServiceID_Fail = $00000016 ;
Err_AFee_Usertype_Fail = $00000017 ;
Err_AFee_terminal_id_Fail= $00000018 ;
Err_TP_pid_Fail = $00000019 ;
Err_Msg_Fmt_Fail = $0000001A ;
Err_Msg_Src_Fail = $0000001B ;
Err_FeeType_Fail = $0000001C ;
Err_Fee_Code_Fail = $0000001D ;
Err_Valid_time_Fail = $0000001E ;
Err_At_Time_Fail = $00000020 ;

Err_Dest_terminal_id_Fail= $00000021 ;
Err_Msg_Content_Fail = $00000022 ;
Err_Destusr_Tl_Fail = $00000023 ;
Err_Msg_Length_Fail = $00000024 ;
Err_Src_Terminal_id_Fail = $00000025 ;
Err_Asc2Binary_Fail = $00000026 ;
Err_msg_Type_Fail = $00000027 ;


/返回 0成功 登录 SMG
function CMPP12_TEK_Connect( SMG_Socket: Integer; //socket 描述符
ICP_ID : Pchar ; //企业代码30033
Login_type,LVersion: byte;
Login_Name,Login_pw,Reserve : pchar
):integer;
var
Pk_len : longword ;

//szbuff : array [0..2048] of char ;
logstr,strdata : string;
iRet : Integer ;
//pakcet variant
packet,pk_recv : TCMPP12_Packet ;
stamptime : TTimeStamp ;
Stime,Sequ : longword ;
begin
//********************************************************************
//try
//stamptime := DateTimeToTimeStamp(NOW);
//产生序列号 data+time node_sequence
Stime := DateTimeToUniteLongword(now);
inc(CMPP12_Tek_Sequence) ;
Sequ := CMPP12_Tek_Sequence ;

Pk_len := TCMPP12_Head_len + TCMPP12_Connect_len ;
//包头
packet.pk_Head.Msg_Len := htonl(Pk_len) ;//
packet.pk_Head.CommandID := htonl(CMPP12_CONNECT) ;
packet.pk_Head.SeqNum := htonl(Sequ) ;
//包体 wx 917020 917061
Strcopy(packet.pk_body.pk_Connect.Source_Addr, ICP_ID);
strcopy(packet.pk_body.pk_Connect.Authent_ICP, Login_pw);
packet.pk_body.pk_Connect.version := LVersion ;
//MSG_id1 :=1090693364 ;
packet.pk_body.pk_Connect.timeStamp := htonl(Stime) ;

iret := send(SMG_Socket,packet,Pk_len ,0);
if iret=Pk_len then
begin
//iret := recv(SMG_Socket,szbuff,TCMPP12_Head_len,0);
if pub_SocketIsRead(SMG_Socket,global_Timeout )>0 then
begin
iret := recv(SMG_Socket,pk_recv.pk_Head,TCMPP12_Head_len,0);
if iret=TCMPP12_Head_len then
begin
//CopyMemory(@pk_recv ,@szbuff,TCMPP12_Head_len);
pk_recv.pk_Head.Msg_Len := ntohl(pk_recv.pk_Head.Msg_Len);
pk_recv.pk_Head.CommandID := ntohl(pk_recv.pk_Head.CommandID);
pk_recv.pk_Head.SeqNum := ntohl(pk_recv.pk_Head.SeqNum);
if pk_recv.pk_Head.CommandID = CMPP12_CONNECT_REP then
begin
iret := recv(SMG_Socket,pk_recv.pk_body.pk_connect_rep,TCMPP12_Connect_REP_len,0);
//iret := recv(SMG_Socket,szbuff,pk_recv.pk_Head.Msg_Len-TCMPP12_Head_len,0);
if iret>0 then
begin
//返回登录状态
{CopyMemory(@pk_recv.pk_body.pk_connect_rep,
@szbuff,
pk_recv.pk_Head.Msg_Len-TCMPP12_Head_len);
}
{logstr := Format('BodyLen:%d Status:%d Ver$%x Auth:%s',[iret,
pk_recv.pk_body.pk_connect_rep.Status,
pk_recv.pk_body.pk_connect_rep.version,
pk_recv.pk_body.pk_connect_rep.Authent_ISM ]);
MessageDlg(logstr, mtWarning, [mbYes], 0);
}
result := pk_recv.pk_body.pk_connect_rep.Status ;
end
else //recv body fail
result := -4;
end
else // command id fail
result := Err_unkown_command ;
end
else begin // recv fail
//AppendLineToLog('debug.txt',DateTimeToStr(Now)+': bind recv fail:'+IntToStr(iret));;
result := Err_recv_fail ;
end;
end
else begin
if iret=0 then
result := Err_Socket_TimeOut
else
result := Err_recv_fail ;
end;
end
else begin //send fail
result := Err_send_fail ;
end;
//except
// ;
//end;
end;
 
为什么没有认关心贴主是否 MM 呢? [:D]
 
其实是不是MM都不重要,重要的是有这么多热心的朋友!感谢!感谢各位!
我现在已经没有研究CMPP了,也没有时间!
 
好久的帖子,但是是金子.如果哪位愿意提供新连接CMPP的代码,请告诉我windc@sina.com
谢谢.
 
后退
顶部