我通过套接字交换一些数据,在通信的某个时刻,我需要发送这样的消息:
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);
答案 0 :(得分:3)
这是因为角色5
的ASCII序号是35.当你写:
IntToStr(Length(Login))
您正在将值为5
的整数转换为字符串。这是'5'
。 ord('5')
是35
。
您应该使用:
AnsiChar(Length(Login))
并希望Login
的长度不超过255个字符。