Отправка специальных строк с помощью «WriteLn» в «Indy» (Delphi) - PullRequest
0 голосов
/ 15 июля 2010

В Indy, когда мы отправляем некоторые строки на сервер, они изменяются и будут отображаться в новом формате. Например, я попытался отправить двоичный файл (File.exe) с помощью команды «WriteLn» в indy:

    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);

когда клиент отправлял строки на сервер, я следил за клиникой с помощью сниффера. и наконец я получил этот результат:

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

Как вы видите, есть некоторые символы, которые больше не имеют своего истинного формата, и они изменились на "?" персонаж . но следует отметить, что сниффер автоматически изменил некоторую строку на «.» Например, одна из этих точек (".") может быть chr (0) или chr (5), может быть !!

но анализатор не может изменить некоторые символы на "." и мы видим их в "?" формат. например, я открываю двоичный файл с помощью блокнота, и вы можете увидеть истинный формат:

альтернативный текст http://up.iranblog.com/Files/9f195012dbc2425b8773.png Во всяком случае, вопрос: как я могу отправить двоичный файл с командой «WriteLn» в Indy 10?

1 Ответ

13 голосов
/ 15 июля 2010

@ Kermia, процедура WriteLn предназначена для отправки текстовых данных не в двоичном виде, а также добавляет CRLF в конце каждого отправленного сообщения.

Вы можете использовать процедуру WriteStream или Write для отправки двоичных данных.

если вы настаиваете на использовании процедуры WriteLn, вам необходимо кодировать двоичные данные перед отправкой, используя двоичное-текстовое кодирование как Base64 , и после декодирования на стороне сервера.

...