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



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

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 个字符。

最新更新