2009-04-29 2 views
0

Можно ли эмулировать входящие сообщения с помощью Indy (если это имеет значение: я использую Indy 10 и Delphi 2009)? Я хочу иметь возможность создавать эти сообщения локально, и я хочу, чтобы Indy полагала, что они происходят от конкретных клиентов в сети. Вся внутренняя обработка Indy (выбор потока, в котором получено сообщение и тому подобное) должна быть точно такой же, как если бы сообщение поступило по сети.Эмуляция входящих сетевых сообщений для Indy

Любые идеи по этому поводу? Заранее благодарим за любые советы.

ответ

5

Что вы хотите сделать, не имеет ничего общего с Indy, поскольку вам нужно будет сделать это на гораздо более низком уровне. Самый простой способ заставить Indy полагать, что сообщения поступают от конкретного клиента, - это ввести правильно подготовленные пакеты в сетевой стек. Прочитайте о вводе пакетов TCP в Google или Wikipedia. EtterCap - один из таких инструментов, который позволяет вводить пакеты в установленные соединения. Однако это определенно происходит в серых областях, поскольку некоторые из этих инструментов являются незаконными в некоторых странах.

В любом случае, все это ИМХО слишком сложно. Я не знаю, что именно вы хотите сделать, но специально подготовленный клиент или сервер - гораздо лучший инструмент для эмуляции определенного поведения при разработке серверных или клиентских приложений. Вы можете запускать их локально, или если вам нужно иметь разные IP-адреса или подсети, вы можете много сделать с виртуальными машинами.

+1

+1 как обычно, отличный ответ! Плохая новость для меня :( – jpfollenius

0

У Indy нет встроенных механизмов для этого, но, думая с головы, я бы рекомендовал создать небольшое тестовое приложение (или набор), которое выполняется локально на вашей машине разработки и подключается к вашему серверу Indy приложение для воспроизведения сообщений.

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

Мой последний концерт, в котором участвует Indy, и все наши испытания проводились с помощью аналогичного приложения типа Resender, которое загружало бы файлы локальных сообщений и отправляло их в приложение Indy server.

HTH и удачи!

+0

НО: Indy затем получит IP-адрес и номер порта локально запущенного приложения, а обработка входящего сообщения выполняется в дополнительном потоке прослушивателя, созданного для этого соединения. Он не имеет такого же эффекта, как другой клиент, отправляющий сообщение. Но спасибо за ответ в любом случае! – jpfollenius

+0

Я нахожу ваш комментарий abit запутанным, поскольку Indy создает новый поток прослушивателя для любого входящего соединения, будь то локальный или удаленный. Я предполагаю, что вы используете TIDTCPServer и определили свои обработчики команд. TidTCPServer создает новый поток любого нового соединения и обрабатывает обработчики команд в контексте этого вновь созданного потока. – Nazar

+0

Точно! И я хочу, чтобы команда выполнялась в потоке прослушивателя конкретного клиента без отправки клиенту сообщения. Понимаю? – jpfollenius

0

Одна вещь, которую вы можете сделать, это создать виртуальные машины для запуска ваших тестовых клиентов, таким образом, они не будут рассматриваться как «локальная машина», а ее довольно просто создать сложную сеть с VMS - при условии, что у вас есть достаточно памяти и дискового пространства. Другим преимуществом тестирования с помощью VM является то, что вы можете полностью исключить среду разработки, когда пришло время сосредоточиться на развертывании. Удивительно, сколько времени это экономит в одиночку.

VirtualPC - бесплатная загрузка из Microsoft и работает достаточно хорошо. VMWare имеет другой вариант, но стоит немного больше, чтобы начать. Для целей развития я предпочитаю настольные версии, но серверные версии также хорошо работают. Вам все равно потребуется лицензия на установку виртуальной ОС. MSDN членство, вероятно, самый дешевый способ, и позволяет создавать тестовые среды для других вариантов ОС.

+0

VMWare Server бесплатный, также является VMWare ESXi и VirtualBox от Sun – mjn

0

Indy имеет абстрактный механизм стека для поддержки кроссплатформенности (IDStack.pas) Я думаю, что вы можете взломать стек для окон (IdStackWindows.pas). Это класс. U может даже подумать о том, чтобы произвести его и переопределить некоторые функции для взлома.

Смежные вопросы