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

时间:2010-07-15 07:19:19

标签: 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;

并发送字符串:

FileClient.IOHandler.WriteLn(Part);

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

MZ?.........yy..,.......@...................................,.....o..?.I!,.LI!This    program cannot be run in DOS mode....$..

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

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

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

1 个答案:

答案 0 :(得分:13)

@Kermia,WriteLn过程旨在发送非二进制文本数据,并在发送的每个mesagge的末尾添加一个CRLF。

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

如果您坚持使用WriteLn程序,则需要在使用Binary-to-text encoding Base64发送之前对服务器端进行解码之前对二进制数据进行编码。