📄 unit1.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 + -