Сейчас на форуме: bartolomeo, vasilevradislav, rmn, Magister Yoda (+7 невидимых)

 eXeL@B —› Программирование —› Обмен данными между двумя прогами
Посл.ответ Сообщение

Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 29 июня 2008 16:21
· Личное сообщение · #1

Здравствуйте!

Подскажите, пожалуйста, как оптимальнее всего сделать обмен между двумя прогами(обе написаны на делфях). В какую сторону лучше всего копать?

Заранее спасибо за помощь ;)

-----
моя подпись!





Ранг: 95.2 (постоянный), 26thx
Активность: 0.060
Статус: Участник

Создано: 29 июня 2008 16:33
· Личное сообщение · #2

Через сокет



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 29 июня 2008 16:34
· Личное сообщение · #3

locker_fx можешь порулить в сторону WM_COPYDATA

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 29 июня 2008 16:41
· Личное сообщение · #4

Stack пишет:
locker_fx можешь порулить в сторону WM_COPYDATA

Нагуглил, курю...

-----
моя подпись!




Ранг: 63.8 (постоянный), 2thx
Активность: 0.030
Статус: Участник

Создано: 29 июня 2008 17:05 · Поправил: drin
· Личное сообщение · #5

немного более продвинутое решение: help.madshi.net/IPC.htm с возможностью получить ответ неограниченный по размеру

правда сам никогда не юзал




Ранг: 260.9 (наставник)
Активность: 0.120
Статус: Участник
John Smith

Создано: 29 июня 2008 17:35
· Личное сообщение · #6

маппинги + мьютексы = быстро весело надежно
правда от прямоты рук зависит...

-----
Недостаточно только получить знания:надо найти им приложение





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 29 июня 2008 19:27 · Поправил: s0larian
· Личное сообщение · #7

locker_fx, для delphi есть туча компонентов оборачивающих сокеты. Выбери какой-нить по интерфейсу и сделай client/server на 127.0.0.1... В дальнейшем это будет работать и по сетке.



Ранг: 309.8 (мудрец), 21thx
Активность: 0.170
Статус: Участник

Создано: 30 июня 2008 00:46
· Личное сообщение · #8

если требуется общение в обе стороны то подойдёт пайп... если только в одну то можно поюзать mailslot...

-----
Shalom ebanats!




Ранг: 2.1 (гость)
Активность: 0=0
Статус: Участник

Создано: 30 июня 2008 11:30 · Поправил: Izis
· Личное сообщение · #9

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



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 30 июня 2008 11:36
· Личное сообщение · #10

Ну да если требуеться передать большое количесвто данных то WM_COPYDATA не рулит. но если просто надо передать пару строчек текста\данных то нет смысла заморачиваться с сокетами и прочими.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 30 июня 2008 11:58
· Личное сообщение · #11

На васме целая статья была на эту тему, курить поиск неохота сам поищи.

-----
Yann Tiersen best and do not fuck




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 30 июня 2008 17:07
· Личное сообщение · #12

Stack пишет:
Ну да если требуеться передать большое количесвто данных то WM_COPYDATA не рулит. но если просто надо передать пару строчек текста\данных то нет смысла заморачиваться с сокетами и прочими.

Сейчас нужно сделать как можно проще. Объёмы не очень большие

-----
моя подпись!




Ранг: 39.4 (посетитель), 9thx
Активность: 0.01=0.01
Статус: Участник

Создано: 30 июня 2008 17:48 · Поправил: 2nd
· Личное сообщение · #13

для delphi было такое :
Application Interprocess Communication Library v1.01 (c) Peter Sippel

вот статья на эту тему
www.compress.ru/article.aspx?id=11763&iid=458


также можно посмотреть в стандартный каталог delphi:
x:\Program Files\Borland\Delphix\Demos\Ipcdemos



Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 30 июня 2008 18:56
· Личное сообщение · #14

2nd

Спасибо, почитаю.


Подскажите плиз. А как по сети(мировой паутине) держать постоянное соединение лучше всего? стандартных компонентов клиент-сервер хватит?

-----
моя подпись!





Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 30 июня 2008 19:39
· Личное сообщение · #15

locker_fx пишет:
Подскажите плиз. А как по сети(мировой паутине) держать постоянное соединение лучше всего? стандартных компонентов клиент-сервер хватит?

Так же как и по локалке - TCP соединение. В виде heart beat можно использовать TCP keep alive или, в случае собственного протокола, написать свой собственный "nop" и "ack". Реализация - дело опыта и вкуса. Для delphi немеряно TCP компонентов.



Ранг: 63.8 (постоянный), 2thx
Активность: 0.030
Статус: Участник

Создано: 30 июня 2008 21:53
· Личное сообщение · #16

s0larian пишет:
Для delphi немеряно TCP компонентов.

например INDY, имхо самая простая и с гигантским функционалом, но правда местами кривовато реализованная



Ранг: 107.5 (ветеран)
Активность: 0.150
Статус: Участник

Создано: 01 июля 2008 11:49
· Личное сообщение · #17

drin пишет:
имхо самая простая и с гигантским функционалом, но правда местами кривовато реализованная

try ... except рулит - на крайняк там сорсы есть можно порпарвить если что.

-----
Md5 fcbb6c9c9a5029b24d70f2d67c7cca74




Ранг: 160.1 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 01 июля 2008 20:51
· Личное сообщение · #18

locker_fx пишет:
имальнее всего сделать обмен между двумя прогами

проги на одном компе всегда или могут быть на разных ?



Ранг: 271.5 (наставник), 12thx
Активность: 0.150
Статус: Участник
Packer Reseacher

Создано: 02 июля 2008 19:21
· Личное сообщение · #19

Нашел в --> Исследование переносимого формата исполнимых файлов "сверху вниз" <-- http://education.kulichki.net/comp/hack/27.htm#back_3

следующее:
0x10000000 - Сегмент раздеяют все процессы, загрузившие данный файл

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

-----
My love is very cool girl.




Ранг: 113.4 (ветеран)
Активность: 0.130
Статус: Участник
Ветеран

Создано: 02 июля 2008 19:32
· Личное сообщение · #20

theCollision пишет:
Нашел в --> Исследование переносимого формата исполнимых файлов "сверху вниз" <--

следующее:
0x10000000 - Сегмент раздеяют все процессы, загрузившие данный файл

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


Спасибо, но всё это слишком сложно и геморойно.


Для обмена между прогами, которые на одном компе заюзал WM_COPYDATA, для остальных коннектов юзаю сокеты.

-----
моя подпись!





Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 03 июля 2008 12:21
· Личное сообщение · #21

locker_fx
Смотря обмен чем нужно реализовать, если необходима реакция на события, то поможет обьект ядра Event, CreateEvent и так далее смотри в документации или у Рихтера "Windows для профессионалов", если нужен обмен, к прнимеру, каким-то текстом, то можно либо использовать мэппинг, либо попробовать кое-что посвежее: можно создать dll с секцией данных, разделяемой в памяти, и использовать её, всё так же, как и при реализации хуков, только нет никаких хуков

-----
Stuck to the plan, always think that we would stand up, never ran.




Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 03 июля 2008 21:20 · Поправил: HiEndsoft
· Личное сообщение · #22

Юзаю расшаренные секции в dll для мелочей, и файломаппинг для объемных и не парюсь: быстрый обмен в памяти, а не ч/з тормозные события, MailSlots и т.п.

-----
продавец резиновых утёнков




Ранг: 63.8 (постоянный), 2thx
Активность: 0.030
Статус: Участник

Создано: 05 июля 2008 09:33
· Личное сообщение · #23

а кто нибудь юзал IPC?
если задача, к примеру, обмениваться десятками а то и сотнями тысяч мелких сообщений байт этак в 256, используя пул потоков в 20, и с минимальными задержками (меньше 1мс) и расходами тактов... IPC для таких целей подойдет? а то с TCP/IP в данной задаче много накладных расходов... или может что-то иное юзали для таких целей?




Ранг: 387.4 (мудрец)
Активность: 0.170
Статус: Участник
системщик

Создано: 06 июля 2008 04:19 · Поправил: s0larian
· Личное сообщение · #24

drin, UDP соединение на localhost для windows, и unix domain sockets для linux. На обоих системах такой тип соединения - хороший компромисс между удобным/известным API и производительностью. На windows пакеты даже не доходят до NDIS слоя - то есть почти нету "накладных расходов".



Ранг: 54.9 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 июля 2008 01:35
· Личное сообщение · #25

Вот когда то тоже озадачивался и перепробовал всё что мог, и матил и пайп и сокеты, но требовалось чтобы приложение так же работало в 9x система, а там этого всего нет. В архиве то, что использовал для своих проектов. Может пригодится один на IPC другой Message's

8871_06.07.2008_CRACKLAB.rU.tgz - AppCommunication.7z


 eXeL@B —› Программирование —› Обмен данными между двумя прогами
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати