Отправка и получение потоков данных в Delphi - PullRequest
1 голос
/ 19 октября 2011

Я хочу создать программное обеспечение для подключения к другому и отправки некоторых данных (на основе текста) в другую программу через Интернет.

Программное обеспечение будет отправлять данные каждые 300 миллисекунд (с использованием таймера), и получатель долженполучить данные вовремя.

Соединение может быть следующим:

  1. любые данные могут быть потеряны;
  2. , но остальные должны прибыть вовремя с минимальной задержкой, насколько это возможно (максимум 2 секунды);
  3. задержанные данные можно считать потерянными, их можно игнорировать.

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

Может кто-нибудь сказать мне, как сделать такую ​​программу, в частности

  • , какой компонент я могу использовать (любые примеры INDY);
  • какие технологии вы используетерекомендую.

Я планировал сделать это с Delphi, но другие рекомендации также приветствуются.

========================= update1 =================

Можно ли отправлять изображения через поток

Ответы [ 2 ]

3 голосов
/ 19 октября 2011

Я предлагаю использовать протокол UDP и добавлять информацию о метках времени к вашим данным и отслеживать входящие данные на принимающей стороне.Вы можете использовать компоненты UDP-сервера (TIdUDPServer) и клиента (TIdUDPClient) из Indy или других пакетов.Клиентский компонент для отправки данных и сервер для приема.

Лично я обычно предпочитаю Synapse -классы .Они более низкого уровня, чем Indy, поэтому легче узнать, что происходит, но с другой стороны, вам может понадобиться реализовать что-то самостоятельно, что Indy может предоставить по умолчанию.

Обновление

Реализация довольно проста:

Отправка данных:

Удалите TIdUDPClient на форму.Установите «Host» в качестве имени или IP-адреса принимающей стороны (или «localhost», если вы запускаете свои программы на одном компьютере) и в качестве порта введите большое число, где сервер прослушивает, например, 54656.

Добавьте следующий код для кнопкиили событие таймера:

IdUDPClient1.Send('Hello, world!');

Получение данных:

Удалите компонент TIdUDPServer в форму.Установите порт по умолчанию на тот же порт, что и при отправке приложения.Добавьте обработчик события OnUDPRead с кодом:

MessageDlg('Received: ' + StringOf(AData), mtInformation, [mbOk], 0);

И диалоговое окно нового сообщения появляется при каждом получении нового сообщения.

Обновление 2

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

0 голосов
/ 19 октября 2011

Я бы рекомендовал использовать что угодно, кроме Indy.Это и глючит (особенно версии в комплекте с Delphi) и медленнее, чем другие наборы компонентов.Его легко понять и начать использовать, но как только вы углубитесь под капот, вы начнете замечать небольшие проблемы.Indy постоянно находится в стадии разработки, и вы можете найти последнюю сборку здесь .Проблема в том, что вы не можете легко заменить связанную версию на более новую в версиях Delphi начиная с 2009 года из-за некоторых жестко закодированных зависимостей.

В Delphi интегрировано несколько других методов сетевого взаимодействия, но я рекомендую изучить сторонние компоненты,Во-первых, если вам нужен открытый исходный код, вы должны взглянуть на Overbyte ICS .Это немного сложно освоить, но у него хорошая производительность и набор функций.

Как очень хорошее коммерческое решение, взгляните на IP ^ Works .Я только поцарапал его, но из того, что я увидел, я могу искренне рекомендовать его.

...