Y
yetsen
Unregistered / Unconfirmed
GUEST, unregistred user!
我自己写了一个smpp协议的短信收发程序,现在遇到点问题,请大家帮助:
按照协议定义了一个SMPP消息:
TSMPP_HEAD_tag = packed record //消息头
Total_Length: LongWord; //消息总长度(含消息头及消息体)
Command_ID: LongWord; //这个字段表明此条短消息的类型
Command_status: LongWord;//此字段表示一个命令的成功与失败,
Sequence_ID: LongWord; //消息号
end;
TBIND_tag = packed record //消息体, 假设
system_id: array[0..15] of Char;
TBIND = Packed Record //消息结构
Head : TSMPP_HEAD_tag;
body : TBIND_tag;
当具体发送这个消息的时候,由于system_id是可变长度的,假设system_id=('a','a','a',#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0)
在Total_Length的取值为SizeOf(TBIND)=32将不对,因该是sizeof( TSMPP_HEAD_tag)=16,再加上length(system_id)=4,取20才对,发送给server端,cSocket.SendBuf( TBIND1, SizeOf(TBIND1))时,如何截断包尾部的一串空值???
我暂时将变长改成定长实现了,但是程序缺少通用性。
按照协议定义了一个SMPP消息:
TSMPP_HEAD_tag = packed record //消息头
Total_Length: LongWord; //消息总长度(含消息头及消息体)
Command_ID: LongWord; //这个字段表明此条短消息的类型
Command_status: LongWord;//此字段表示一个命令的成功与失败,
Sequence_ID: LongWord; //消息号
end;
TBIND_tag = packed record //消息体, 假设
system_id: array[0..15] of Char;
TBIND = Packed Record //消息结构
Head : TSMPP_HEAD_tag;
body : TBIND_tag;
当具体发送这个消息的时候,由于system_id是可变长度的,假设system_id=('a','a','a',#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0,#0)
在Total_Length的取值为SizeOf(TBIND)=32将不对,因该是sizeof( TSMPP_HEAD_tag)=16,再加上length(system_id)=4,取20才对,发送给server端,cSocket.SendBuf( TBIND1, SizeOf(TBIND1))时,如何截断包尾部的一串空值???
我暂时将变长改成定长实现了,但是程序缺少通用性。