Отправка и получение потоков данных в Delphi с помощью INDY 10 - PullRequest
1 голос
/ 20 октября 2011

Это продолжение Отправка и получение потоков данных в Delphi .

Я собираюсь отправить изображение, используя TCP / IP, а затем обновлю изменения в этом изображении, используя UDP, разделив изображение на маленькие кусочки и отправив только те куски, которые имеют серьезные изменения, затем клиенту.будет исправлять эти фрагменты на старом изображении.

каждые 15 секунд, все изображение обновляется с использованием TCP / IP.

Изображение на сервере будет обновляться веб-камерой.(Как видео поток). Я уже создал детектор движения и сборщик фрагментов в Delphi, которые работают отлично.

Ниже приведены мои проблемы с реализацией

1.Отправка и получениеПотоки данных с использованием TIDUDPServer / client в INDY 10 (пример кода в> indy 10) Я использую delphi XE2
2. Какой максимальный размер данных может поддерживать один пакет в UDP *
3.При двойном щелчке поСобытие IdUDPServer1.onUDPRead, приводящее к ошибке с

TArray <System.Byte>

Я думаю, что последняя ошибка связана с недавно введенным пространством имен в XE2.

как насчет использования следующего вместо indy

 Sockets.TTcpClient 
 Sockets.TTcpServer 
 Sockets.TUdpSocket 

1 Ответ

1 голос
/ 23 октября 2011
  1. Компоненты Indy UDP вообще не поддерживают потоки, только TIdBytes и String (которые обрабатываются внутренне с использованием TIdBytes). Если вы хотите отправить / получить TStream данные, вам необходимо скопировать данные в / из промежуточного TIdBytes.

  2. UDP теоретически ограничен ~ 64 КБ, но реально намного меньше из-за ограничений ОС. Обычно вы не должны отправлять более 8-16 КБ на пакет.

  3. Это известная ошибка компилятора Delphi, которая еще не была исправлена ​​в нескольких последних выпусках. Среда IDE генерирует код на основе RTTI, который компилятор не использует правильно. Это не ошибка Indy, но Embarcadero знает об этой проблеме. Пока они (наконец) не исправят ошибку компилятора, вы можете обойти ее, назначив обработчик события OnUDPRead в коде во время выполнения, а не во время разработки.

...