关于一个协议的理解与转16进制UDP发送
树上猪 2013-09-17 04:41:44 关于写一个协议UDP发送问题(16进制)
协议格式:
第1位:MessageSize(发送内容大小,但不包括描述大小的2个字节)#$00#$18总共除本身外是26个字节
第2位:1rtheaders头字节00000111(二进制8个数)对应16进制应当是#$07
第3位:Addresssize地址大小(1个字节)应当是#$14
第4位:address地址(12.0.0.102)不限字节数但最大不能大于255个字节,转成ucs2-le编码应当是#$00#$31#$00#$32#$00#$2E#$00#$30#$00#$2E#$00#$30#$00#$2E#$00#$31#$00#$30#$00#$32总共20个字节
第5位:2rtheaders第二个头字节(0:4为短信序号;5:6保留字节为00;7位设置为1序号溢出显示,所以这个二进制8个 数应当为00000001对应16进制应当是#$01)
第6位:3rtheaders第三个头字节(0:4为0X04表示短信内容的编码格式为use-le,所以前5位为00100;5:6保留为00;7位为0所以这8人数应当是00100000对应16进制应当是#$20)
第7位:Message短信内容,我这里只是发“H”按ucs2-le编码应当是#$68#$00
以上内容都须16进制发送。我的代码如下,可是对方接收不到信息,不知那里对于协议理解有问题。
procedure TDatastrFrm.Button10Click(Sender: TObject);
var
sendstr:string;
begin
try
idudpclient1.Active:=false;
idudpclient1.Host:=trim(edit7.Text);
idudpclient1.Port:=strtoint(edit8.Text);
idudpclient1.Active:=true;
except
end;
//sendstr:=#$00#$18#$07#$14#$31#$00#$32#$00#$2E#$00#$30#$00#$2E#$00#$30#$00#$2E#$00#$31#$00#$30#$00#$32#$00#$01#$20#$68#$00;
sendstr:=#$00#$18#$07#$14#$00#$31#$00#$32#$00#$2E#$00#$30#$00#$2E#$00#$30#$00#$2E#$00#$31#$00#$30#$00#$32#$01#$20#$68#$00;
idudpclient1.Send(pchar(sendstr));
end;
以上按个人理解应当是没有问题,发送给对讲机应当是可以收到一个“H”的短信的,但却是怎么也收不到,通道确认了是没有问题。