关于SMPP协议接收和发送数据问题
作一个SMMP协议服务器端接收对方发送过来的短信信息,并同时发送短信息给对方。在啃了一周的SMPP协议之后基本理解了其相关流程。
我为SMSC端(服务器端),对方为为ESME消息体端(客户端),现在根据协议理解一个连接判断请求如下,ESME向SMSC发送连接要求以发送者身份连接请求,相关请求内容如下:
对方发送一个消息头过来;Command Length(长度4个字节,高位在前,低位在后,格式integer;表示消息头字节数)+command ID(长度4个字节,高位在前,低位在后,格式integer;此信息表示类型在0H-FFH之间,此处为发送请求所以具体内容对应为0X00000002);+Command Status(为NULL);Sequence NO(长度4个字节,高位在前,低位在后,格式integer;此表示消息头的编号在01H-07FFFFFFFH之间,返回继续从01H开始);Optional Message Body(此为消息体,在移动股票中为STK应用协议,我这里对方应当会置为空NULL才).
针对于对方的请求,我需要作一个回复,相关协议回复如下:
Command Length(长度4个字节,高位在前,低位在后,格式integer;表示消息头字节数)+command ID(长度4个字节,高位在前,低位在后,格式integer;此信息表示类型在080000000H-0800000FFH之间,此处为SMSC响应发送请求故对应具体内容为0X80000002);+Command Status(为OX000000000:表示成功);Sequence NO(NULL);Optional Message Body(此为消息体,在移动股票中为STK应用协议,我这里对方应当会置为空NULL才)
对于对方的请求,我用如下代码
procedure THotSOSMain.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
begin
s:=Socket.ReceiveText;
memo1.Line.add(s);
end;
这里Memo1把S显示出来,会显示成什么样,有人知道吗?是乱码,还是什么(最好给一个完整的内容,而不是告诉我是16进制数或Encode主个抽象的表示),因为现在没有办法与对方测试,一旦测试就必须一些成功,所以我这里没有机会在实际的数据过来看到再来采取解析方式。
第二,我回复的话,这里面都要求高位在前,低位在后,这个怎么写法,同时是要以16进制的方式传送给对方吗,还是要可以理解为以10进制发送就可以。最好麻烦给出实际的代码出来,因为第一次接触这个,确实有点弄湖涂了。
以上
[解决办法]
肯定是乱码,text接收的话,看不到命令字节的。
Socket.ReceiveBuf(rbuf[0],leng);
viewstr:='' ;
try
for i:=0 to leng-1 do
begin
viewstr:=viewstr+ inttohex(rbuf[i],2)+'' ;
end;
except
showmessage(' 读取数据赋值错误! ');
exit;
end;
memo1.Lines.Add(viewstr);