⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 delphi 短信下发和接收的demo 程序.可以在windows环境下调用linux提供的接口发送和接收短信
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls,head, Sockets, ExtCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button3: TButton;
    Edit5: TEdit;
    Label4: TLabel;
    Label5: TLabel;
    Edit6: TEdit;
    Label6: TLabel;
    Edit4: TEdit;
    Label7: TLabel;
    Edit7: TEdit;
    Label8: TLabel;
    Edit8: TEdit;
    Edit9: TEdit;
    Label9: TLabel;
    Label10: TLabel;
    Label11: TLabel;
    Edit10: TEdit;
    Label12: TLabel;
    Label13: TLabel;
    Memo1: TMemo;
    Label14: TLabel;
    Edit11: TEdit;
  //  Memo1  : TMemo;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);

  private
    
  public
    socket :integer;
  //  dphone,dcontent:pchar;
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}
//端口绑定函数调用
function App_Bind(ip:pchar; port:integer; user:pchar; password:pchar):integer;cdecl;
external 'smsdll.dll';
//断开端口函数调用
function App_Unbind(socket:integer):integer;cdecl;
external 'smsdll.dll';
//下发短信函数调用
 function App_Submit(socket:integer;gwid:pchar;innerservid:pchar;
                     pktotal:byte; pknum: byte ; servid:pchar;
                     feeusertype:pchar; feetermid:pchar; feetermtype:byte;
                     msgfmt: byte; feetype:pchar; feecode:pchar;
                     srcid: pchar; desttermid:pchar;desttermtype:byte;
                     content:pchar;masid:pchar;appname:pchar;index:integer):integer;cdecl;
 external 'smsdll.dll';
{function App_Submit(socket:integer;var m_submit:SUBMIT;var m_submitresp:SUBMITRESP;index:integer):integer;cdecl;
external 'smsdll.dll';
{function App_Submit(socket:integer;
                    rPhonte:pchar;
                    sPhone:pchar;
                    sContent:pchar;
                    sGateway:pchar;
                    index:   integer) :integer;cdecl;external'smsdll.dll'; }
// 接收短信函数调用
function App_Deliver_sms(socket:integer;buf:pchar;index:integer):integer;cdecl;
external 'smsdll.dll';

//收短信线程
function MyThreadFunc(P:pinteger):integer;stdcall;
var
  ret,pos:             integer;
  socket :          integer;
  m_deliver:        ^app_deliver ;
//  m_deliver_resp: ^App_deliver_resp;
  content:pchar;
  buff2:array[0..1024] of char;
begin
  socket:=p^;
  content:=@buff2[0];
  getmem(m_deliver,1024);
  //循环收短信
  while (true) do
  begin
     ret:=App_Deliver_sms(socket,content,0);
     if ret>0 then
    // showmessage('接收成功');
   begin
        pos:=0;
				CopyMemory(@(m_deliver.head.Message_Length),content,sizeof(integer));
				pos:=pos+sizeof(integer);      //消息长度
				CopyMemory(@(m_deliver.head.Command_ID),content+pos,sizeof(integer));
				pos:=pos+sizeof(integer);
				CopyMemory(@(m_deliver.head.Sequence1),content+pos,sizeof(integer));
				pos:=pos+sizeof(integer);
				CopyMemory(@(m_deliver.InData.GWId),content+pos,8);
				pos:=pos+8;                   //上行网关ID
				CopyMemory(@(m_deliver.InData.ServiceId),content+pos,8);
				pos:=pos+8;                   // 业务类别 0001 行业用应
				CopyMemory(@(m_deliver.InData.Priority),content+pos,sizeof(integer));
				pos:=pos+sizeof(integer);     // 优先级
				CopyMemory(@(m_deliver.InData.MsgId),content+pos,sizeof(integer));
				pos:=pos+sizeof(integer);     //消息ID
				CopyMemory(@(m_deliver.InData.UMsgID),content+pos,8);
				pos:=pos+8;
				CopyMemory(@(m_deliver.Dest_id),content+pos,21);
				pos:=pos+21;                         //目的号码
				CopyMemory(@(m_deliver.Service_Id),content+pos,10);
				pos:=pos+10;                          //业务标识
				CopyMemory(@(m_deliver.Msg_Fmt),content+pos,1);
				pos:=pos+1;                          //短信格式
				CopyMemory(@(m_deliver.Src_terminal_Id),content+pos,32);
				pos:=pos+32;                         //源终端MSISDN号码
				CopyMemory(@(m_deliver.Src_terminal_type),content+pos,1);
				pos:=pos+1;                            // 源终端MSISDN类型,0:真实号码;1:伪码。
				CopyMemory(@(m_deliver.Msg_Length),content+pos,1);
				pos:=pos+1;                           //上行短信长度
				CopyMemory(@(m_deliver.Msg_Content),content+pos,160);
				pos:=pos+160;                         // 上行短信内容
				CopyMemory(@(m_deliver.LinkID),content+pos,20);
        
       continue;

   end

    end;
  freemem(m_deliver,1024);
  exitthread(0);

 end;

//建立连接同时收短信
procedure TForm1.Button1Click(Sender: TObject);
var
  p: pinteger;
  ip,user,password : string;
  hThread:Thandle;//定义一个句柄
  ThreadID:DWord;
begin
  getmem(p,128);

  ip:=edit1.Text;
  user:=edit2.Text;
  password:=edit3.text;
  //连接函数调用
  socket:=App_Bind(pchar(ip),7890,pchar(user),pchar(password));
  p^:=socket;
  if socket<0 then
     showmessage('连接失败')
  else
  begin
    showmessage('连接成功');

    // 多线程api 收短信线程建立
    hthread:=CreateThread(nil,0,@MyThreadfunc,p,0,ThreadID);
    if hThread=0 then
    messagebox(hthread,'Didnot CreateaThread',nil,MB_OK);
    SetThreadPriority(hthread, THREAD_PRIORITY_NORMAL);
    ResumeThread(hthread);
    CloseHandle(hthread);

  end ;
end;


procedure TForm1.Button2Click(Sender: TObject);
var
  ret:integer;
begin
  ret:=App_Unbind(socket);
  if ret>0 then
    showmessage('断开成功')
  else
    showmessage('断开失败');
end;

procedure TForm1.Button3Click(Sender: TObject);
var
  gwid,innerservid,servid,feetermid,feetype : string;
  feecode,srcid,desttermid,content,masid,appname : string;
  pktotal,pknum, feeusertype,feetermtype,msgfmt,desttermtype: byte;
  index ,ret : integer;
begin
  gwid := trim(edit4.Text);
  innerservid := trim(edit11.text);
  servid := trim(edit10.text);
  feetermid := '13510001000';
  feetype := trim(edit7.text);
  feecode := '100';
  srcid   := trim(Edit6.Text);
  desttermid := trim(Edit5.text);
  content := trim(Memo1.Text);
 // linkid  := NULL ;
  masid   := trim(edit8.text);
  appname := trim(edit9.text);
  pktotal := 0;
  pknum   :=0;
  feeusertype := 0;
  feetermtype := 0;
  msgfmt  := 15;
  desttermtype := 0;
  index := 0 ;
  ret := App_Submit(socket,pchar(gwid),pchar(innerservid),pktotal,pknum,pchar(servid),pchar(feeusertype),
					          pchar(feetermid),feetermtype,msgfmt,pchar(feetype),pchar(feecode),pchar(srcid),pchar(desttermid),
					          desttermtype,pchar(content),pchar(masid),pchar(appname),index);
  if ret > 0 then
    showmessage('发送成功')
  else
    showmessage('发送失败');

  end;
{
var

   ret : integer;

   m_submit:^SUBMIT;
   m_submitresp:^SUBMITRESP ;
  index:integer;
begin
  GetMem(m_submit,sizeof(SUBMIT));
  GetMem(m_submitresp,sizeof(SUBMITRESP));
  index:=0;
  strpcopy(m_submit.Dest_terminal_Id,trim(Edit5.text)); //接收用户手机号码
  m_submit.Fee_terminal_Id:='13501107023'; //被计费用户的号码(如本字节填空,则表示本字段无效,对谁计费参见Fee_UserType字段,本字段与Fee_UserType字段互斥)
	strpcopy(m_submit.FeeType,trim(edit7.text));  {咨费类型01:对"计费用户号码"免费
                                    02:对"计费用户号码"按条计信息费
                                    03:对"计费用户号码"按包月收取信息费
                                    04:对"计费用户号码"的信息费封顶
                                    05:对"计费用户号码"的收费是由SP实现

	m_submit.Service_Id:='0001';    //   通讯能力
	strpcopy(m_submit.Src_id,trim(Edit6.Text));  //源号码:该号码最终在用户手机上显示为短消息的主叫号码
	strpcopy(m_submit.Msg_Content,trim(Memo1.Text)); //下发短信内容
	m_submit.Msg_Fmt:=15;                     //信息格式 0:ASCII串 3:短信写卡操作  4:二进制信息 8:UCS2编码 15:含GB汉字

  m_submit.Fee_UserType:=0;                {计费用户类型字段
                                           0:对目的终端MSISDN计费;
                                           1:对源终端MSISDN计费;
                                           2:对SP计费;
                                           3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
  m_submit.Pk_total:=1;                   //相同Msg_Id的信息总条数,从1开始
  m_submit.Pk_number:=1;                   //相同Msg_Id的信息序号,从1开始
	strpcopy(m_submit.MasID,trim(edit8.text));       //mas服务器编号
  strpcopy(m_submit.InData.GWId,trim(edit4.Text));  //短信下发网关ID
	strpcopy(m_submit.appname,trim(edit9.text));                //企业接入应用名称编号
	m_submit.Fee_terminal_type:=0;           // 被计费用户的号码类型,0:真实号码;1:伪码
	m_submit.Dest_terminal_tpye:=0;          // 接收短信的用户的号码类型,0:真实号码;1:伪码
	m_submit.FeeCode := '100';                //资费代码(以分为单位)
  m_submit.InData.ServiceId:='10';   //第三方接入的业务的类别 0001 行业用应
  ret:=App_Submit(socket,m_submit^,m_submitresp^,0);
  if ret>0 then
  showmessage('发送成功')
  else
  showmessage('发送失败');

end;

procedure TForm1.Timer1Timer(Sender: TObject);
var
  ret :             integer;
  dphone,dcontent:pchar;
begin
   getmem(dphone,21);
   getmem(dcontent,160);
   if socket > 0 then
   begin
   ret:=App_Deliver_sms(socket,dphone,dcontent,0);

  if ret > 0 then
   begin
       edit7.Text:= dphone;
       edit8.Text:= dcontent;
       showmessage('接收成功') ;

   end
   else if ret <0 then
   showmessage('接收上行信息失败');
   end;
   freemem(dphone,21);
   freemem(dphone,160);
end;
   }
end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -