Отправка двоичных данных с помощью Indy через TCP \ IP, как? - PullRequest
0 голосов
/ 02 июня 2010

Как отправить двоичные данные с компонентами Indy? Какой из них наиболее подходит для этой задачи? Я пытался использовать TIdTcpClient, но он позволяет отправлять только строки.

Я нашел один ответ на эту проблему здесь , но я не понимаю. Это говорит о методе Write(TIdBytes), но ответ мне не ясен. Имеет ли он в виду запись в какой-либо экземпляр TIdBytes и как связать этот экземпляр с TIdTcpClient?

Спасибо за любую помощь.

Ответы [ 2 ]

4 голосов
/ 02 июня 2010

Цитируемая страница не очень хорошо воспроизводит сообщения. Вот что действительно написал Реми:

SendCmd () предназначен только для текстовых команд / параметров. Вам придется отправить двоичные данные после выхода SendCmd (), и сервер должен прочитайте двоичные данные после отправки ответа клиенту. За Пример:

--- клиент ---

begin
  IdTCPClient1.SendCmd('DoIt', 200);
  // send binary data, such as with Write(TStream) or Write(TIdBytes)...
end;

Методы Write, о которых он говорил, являются членами класса TIdIOHandler. Ваш TIdTCPConnection объект имеет экземпляр этого класса в своем свойстве IOHandler, и именно это функция SendCmd использует для отправки своей строки.

Обозначение Write(TIdBytes) означает использование метода Write, который принимает параметр TIdBytes для своего ввода.

Если двоичные данные уже находятся в потоке или динамическом массиве байтов, то вы можете передать одно из них непосредственно методу Write. Также существует метод WriteFile, который отправит весь внешний файл, если вы укажете имя файла. Если вы используете потоковую версию, то у вас есть возможность автоматически включать длину потока.

Если у вас уже нет данных в одной из этих структур, то вы можете либо написать данные по частям с помощью методов Write, которые принимают целочисленные типы различного размера, либо вы можете скопировать данные в TMemoryStream и затем передать это Write.

0 голосов
/ 02 июня 2010

Write - это метод (или как он называется в Delphi) TCPClient. Вот рабочий код того, что вы хотите сделать: http://delphi.about.com/od/internetintranet/l/aa012004a.htm. Должно помочь вам быстро начать работу:)

...