套接字通信中整数5等于35

时间:2013-11-12 18:22:55

标签: delphi delphi-2010

我通过套接字交换一些数据,在通信的某个时刻,我需要发送这样的消息:

  

SendBuff(#$ 06 +#$ 05 +登录,长度(登录)+ 2);

爆炸消息:

"#$ 06" =标题,我需要在此消息的前面发送06

"#$ 05" =登录的长度,这实际上是问题!!

"登录" =包含登录名的AnsiString

"长度(登录)+ 2" =要发送的缓冲区的长度,是登录的长度+ 2 ...

好吧,正如我所说,问题出在#$ 05,如果我这样写,它可以工作,服务器识别消息并授权(考虑登录的长度是5)。但如果我这样做:

  

SendBuff(#$ 06 + IntToStr(长度(登录))+登录,长度(登录)+ 2);

由于某种原因,插座实际上发送了值' 35' !!!我试过这个:

  

SendBuff(#$ 06 +' 5' +登录,长度(登录)+ 2);

同样的问题,套接字发送了价值' 35 ......这里发生了什么? SendBuff过程以这种方式接收参数:

  

procedure SendBuff(InputBuff:AnsiString; PacketSize:Integer);

1 个答案:

答案 0 :(得分:3)

这是因为角色5的ASCII序号是35.当你写:

IntToStr(Length(Login))

您正在将值为5的整数转换为字符串。这是'5'ord('5')35

您应该使用:

AnsiChar(Length(Login))

并希望Login的长度不超过255个字符。