在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”命令发送二进制文件?
答案 0 :(得分:13)
@Kermia,WriteLn
过程旨在发送非二进制文本数据,并在发送的每个mesagge的末尾添加一个CRLF。
您可以使用WriteStream
或Write
过程发送二进制数据。
如果您坚持使用WriteLn
程序,则需要在使用Binary-to-text encoding Base64发送之前对服务器端进行解码之前对二进制数据进行编码。