0

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

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

爆炸消息:

"#$06" = header,我需要在这条消息的前面发送06

"#$05" = Login 的长度,其实就是这个问题!!

"Login" = 包含登录名的 AnsiString

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

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

SendBuff(#$06 + IntToStr(Length(Login)) + Login, Length(Login) + 2);

由于某种原因,实际上套接字发送值'35'!!!我试过这个:

SendBuff(#$06 + '5' + Login, Length(Login) + 2);

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

程序 SendBuff(InputBuff: AnsiString; PacketSize: Integer);

4

1 回答 1

3

That is because the ASCII ordinal for the character 5 is 35. When you write:

IntToStr(Length(Login))

you are converting the integer with value 5 to a string. Which is '5'. And ord('5') is 35.

You should use:

AnsiChar(Length(Login))

and hope that Login is never more than 255 characters in length.

于 2013-11-12T18:25:47.520 回答