这是对我之前的问题here的后续问题。将Delphi 7 Indy 9应用程序升级到Indy 10(II)
很多命令和响应被编码为分隔字符串。在Delphi 7中,这些代码通常使用chr(166)和chr(167)编码。
procedure TFormMain.IdTCPServer1InsertAccount(
ASender: TIdCommand);
var
cmd: String;
request: String;
Params: TMyStrings;
AccountNo, Address, UserName: String;
begin
cmd := 'InsertAccount';
request := Copy(ASender.Rawline, Length(cmd) + 2, Length(ASender.RawLine));
Params := TMyStrings.Create;
try
AssignDelimited(chr(166), request, Params);
AccountNo := Params[0];
Address := replace(char(167), #13#10, Params[1])
UserName := Params[2];
看来,这样做是为了使参数可以包含空格。类似地,命令其内容从备忘录来控制具有其回车换行符与CHR(167)代替这样的备忘录内容可以在不终止命令被发送:
// typical client code
request := edAccountNo.Text + chr(166) +
replace(#13, chr(167), replace(#10, '', memoAddress.Lines.Text) +
chr(166) + Fusername;
idTCPClient1.WriteLn('InsertAccount' + space + request);
在该代码转换为的Delphi 10.1与现在Indy 10,我用ANSIChar(166)做了一个搜索替换chr(166),但是我很快发现Indy 10不喜欢高于127的ANSIChars。请求在客户端显示正确,但是在带有?的服务器
什么是升级此代码的最佳方法? 谢谢。
感谢您始终提供我的问题的完整答案。 – nolaspeaker