我正在通过套接字交换一些数据,在通信的某个点,我需要发送这样的消息:
SendBuff(#$06 + #$05 + 登录,长度(登录)+ 2);
爆炸消息:
"#$06" = 标头,我需要在此消息的前面发送 06
"#$05" = 登录长度,这实际上是问题所在!!
"登录名" = 包含登录名的 AnsiString
"长度(登录)+ 2" = 要发送的缓冲区的长度,是登录的长度 + 2...
好的,正如我所说,问题出在#$05中,如果我这样写,它可以工作,服务器识别消息并授权(考虑到登录长度为5)。但是如果我尝试这种方式:
SendBuff(#$06 + IntToStr(Length(Login)) + Login, Length(Login) + 2);
出于某种原因,实际上套接字发送值"35!!我试过这个:
SendBuff(#$06 + '5' + 登录, 长度(登录) + 2);
同样的问题,套接字发送了值"35"......伙计们,这是怎么回事?SendBuff 过程以这种方式接收参数:
过程 SendBuff(输入增益:AnsiString;数据包大小:整数);
这是因为字符 5
的 ASCII 序数是 35。当你写:
IntToStr(Length(Login))
您正在将值为 5
的整数转换为字符串。这是'5'
.ord('5')
35
.
您应该使用:
AnsiChar(Length(Login))
并希望Login
的长度永远不会超过 255 个字符。