在"Indy"中发送带有"WriteLn"的特殊字符串(Delphi)

Ker*_*mia 0 delphi string indy

在Indy,当我们向服务器发送一些字符串时,它们会更改并以新格式显示.例如,我试图在indy中使用"WriteLn"命令发送二进制文件(File.exe):

    Ms.LoadFromFile(FileAddress);

    Ms.Read(B, Chunk);

    for j := low(B) to high(B) do
    begin
      Part := Part + chr(B[j]);
    end;
Run Code Online (Sandbox Code Playgroud)

并发送字符串:

FileClient.IOHandler.WriteLn(Part);
Run Code Online (Sandbox Code Playgroud)

当客户端向服务器发送字符串时,我正在用嗅探器监视clinet.最后我得到了这个结果:

MZ?.........yy..,.......@...................................,.....o..?.I!,.LI!This    program cannot be run in DOS mode....$..
Run Code Online (Sandbox Code Playgroud)

如你所见,有些角色不再是真正的格式,而是变成了"?" 性格.但应该注意的是,嗅探器会自动将某些字符串更改为"." 例如,其中一个点(".")可能是chr(0)或chr(5)!

但嗅探器无法将某些字符更改为"." 我们在"?"中看到它们 格式.例如,我用记事本打开一个二进制文件,你可以看到真正的格式:

alt text http://up.iranblog.com/Files/9f195012dbc2425b8773.png 无论如何,问题是:如何在Indy 10中使用"WriteLn"命令发送二进制文件?

RRU*_*RUZ 13

@Kermia,该 WriteLn程序旨在发送不是二进制的文本数据,还在每个mesagge发送结束时添加一个CRLF.

您可以使用WriteStreamWrite过程发送二进制数据.

如果您在使用中坚持的WriteLn过程中,你需要使用一个发送之前用于编码的二进制数据二进制到文本编码Base64编码,并且在服务器端的解码之后.