Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Задача Приложение-сервер должно отправлять сообщение приложению-клиенту (скажем так без гарантии доставки меня устроит). Я использовал: 1) сервер ищет hwndTarget окна клиента (FindWindow[Ex]) 2) Если hwndTarget<>0 то SendMessage(hwndTarget, WM_COPYDATA) Но к сожалению это не работает если сервер=SYSTEM (NT Service), а клиент=CURRENT_USER (кроме XP при условии что разрешено взаимодействие сервиса с рабочим столом). MSDN рекомендует использовать NamedPipes. Документации я почитал, типа Named Pipe Server Using Overlapped I/O Synchronous and Overlapped Pipe I/O Коды разные попробовал, разные флаги для пайпа попробовал и т.д. Дополнительное условие : и сервер и клиент - по единственному потоку , поэтому роскоши типа WaitForMultipleObjects или бесконечных Do Loop я в единственном потоке позволить себе не могу. Т.е. что я хочу понять для себя перед тем как продолжу копание в документации. Основной вопрос такой. Пайп это вообще что? Буфер там есть? Ну т.е. создал я пайп при старте сервера: hPipe = CreateNamedPipe У меня получается, что 1) Если сервер пишет в пайп ConnectNamedPipe WriteFile FlushFileBuffers DisconnectNamedPipe то сервер висит пока клиент не прочтет посланную информацию 2) Если клиент читает из пайпа CallNamedPipe (даже с NMPWAIT_NOWAIT) то клиент висит пока сервер не пошлет ему чего-нибудь Иными словами, висяки на сервере и клиенте... А я хочу: 1) Сервер положил Message в пайп, забыл про него и занимается дальше своими делами (без гарантии доставки клиенту) 2) Клиент по таймеру пришел в пайп, и если есть Message, то прочел его. А если нет, то не ждет и занимается дальше своими делами. 3) Дополнительно хочу чтоб пайп очищался при старте клиента И сдается мне что так не получится. Или нужен механизм на клиенте, чтоб не по таймеру, а пайп стучал клиенту про новый message как только Message в пайпе появился. Аналогичто тому как SendMessage стучится в WndProc клиентского окна. (как только так сразу без всяких там таймеров) Есть какие соображения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 17:46 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, mailslot для связи без гарантии доставки и без установления соединения http://msdn.microsoft.com/en-us/library/windows/desktop/aa365794(v=vs.85).aspx http://www.codeproject.com/Articles/8527/Using-Mailslots-for-Interprocess-Communication Эту хрень времён царя Гороха лучше не пользовать, а использовать нормальный человеческий UDP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:08 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
ИзопропилДмитрий77, mailslot для связи без гарантии доставки и без установления соединения http://msdn.microsoft.com/en-us/library/windows/desktop/aa365794(v=vs.85).aspx http://www.codeproject.com/Articles/8527/Using-Mailslots-for-Interprocess-Communication Эту хрень времён царя Гороха лучше не пользовать, а использовать нормальный человеческий UDP Присоединяюсь. В общем-то NP -- это аналог стека TCP/UPD, но для другого протокола сетевого -- NetBIOS. Когда-то микрософт собирался покорить мир без TCP/IP, но вовремя одумался... Теперь в существовании этих протоколов нет смысла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:32 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
ИзопропилЭту хрень времён царя Гороха лучше не пользовать, ...Это ты про пайпы или про mailslot? А про пайпы что можно сказать? В пайпы вроде как влез уже. Вот влезу в mailslot, а там будут те же проблемы, не? UDP я глядел, но что-то не охота. Сервер по результатам работы посылает клиенту грубо текст, а клиент отображает Tray Notification. Клиент может быть не запущен. Сервер тоже может быть остановлен (при наличии клиента=иконка трея). Пока я сделал через таблицу в БД в качестве буфера и все работает. Но хочется конечно что нибудь поцивилизованнее. А м.б. и БД сойдет, пока не решил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:33 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Дмитрий77 А я хочу: 1) Сервер положил Message в пайп, забыл про него и занимается дальше своими делами (без гарантии доставки клиенту) 2) Клиент по таймеру пришел в пайп, и если есть Message, то прочел его. А если нет, то не ждет и занимается дальше своими делами. 3) Дополнительно хочу чтоб пайп очищался при старте клиента И сдается мне что так не получится. Или нужен механизм на клиенте, чтоб не по таймеру, а пайп стучал клиенту про новый message как только Message в пайпе появился. Аналогичто тому как SendMessage стучится в WndProc клиентского окна. (как только так сразу без всяких там таймеров) Это более похоже на mailSlots (от MS, параллельная спецификация к NamedPipes) или на JMS-based message broker (типа ActiveMQ или Hornet). Ты не думай, что если оно JMS, то это только для Java -- с C++ это тоже великолепно работает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:36 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Это ты про пайпы или про mailslot? Забыть можно и про то, и про другое. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:38 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Это ты про пайпы или про mailslot? про оба. А внутри там всё равно TCP и UDP Дмитрий77UDP я глядел, но что-то не охота. в чём проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:44 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
MasterZivТы не думай, -- с C++ это тоже великолепно работает. Ну, мне это надо сделать на VB6 (я деликатно промолчал, ибо какая разница). Т.е. mailslot попробовать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:47 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Ну, мне это надо сделать на VB6 там есть штатный winsock контрол http://msdn.microsoft.com/en-us/library/aa733709(v=vs.60).aspx у него есть событие DataArrival http://msdn.microsoft.com/en-us/library/aa228046(v=vs.60).aspx ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 18:56 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Изопропилтам есть штатный winsock контрол у него есть событие DataArrival Да, я в курсе. Даже пример как-то год назад мне давали: Обмен сообщениями между двумя СВОИМИ приложениями Смущает неколько вещей: 1) Код: vbnet 1. 2. 3. Порты задаюся явно. А вдруг "свободность" порта сглючит вместе со всей конструкцией. 2) Один уважаемый человек тут высказал опасение : AntonariyМожно еще повиснуть винсоком на свободном tcp-порту, но для этого скорее всего потребуется разрешение брандмауэра . 3) Я не люблю добавлять в проекты дополнительные OCX-контролы даже от майкрософт. И делаю это лишь в случае крайней необходимости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 13.01.2014, 23:41 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Дмитрий77, да ты просто полон страхов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 02:20 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
NamedPipes редкостная хрень. Пытался разобраться, даже заработало, но с костылями: после ответа клиенту сервер переставал принимать сообщения, поэтому каждый раз закрытие пайпа и открытие заново. Из за этого изврата со стороны клиента пришлось сделать несколько попыток открытия канала для отправки сообщения. Сервер Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. Клиент у меня на фоксе, но думаю понятно, т.к. использованы только функции WinAPI Клиент Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. Работает стабильно, правда нагрузка небольшая. У меня сервер зацикленный ждет запроса и тутже шлет ответ, но используется асинхронный режим, думаю можно допилить под твои нужды. Только отправить второе сообщение не получится пока первое не принято. AntonariyМожно еще повиснуть винсоком на свободном tcp-порту, но для этого скорее всего потребуется разрешение брандмауэра . Если слушать 127.0.0.1 то брандмауэр не заблокирует. PS Есть библиотека ZMQ , по сути надстройка над TCP для обмена сообщениями. Бесплатная, кроссплатформенная. Для целей "передал и забыл" подходит идеально. Сама занимается установкой и поддержанием соединения, гарантирует доставку отправленного целиком, а не частями. Еще много чего интересного в документации, изучаю, но я еще только базовые моменты освоил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 08:17 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Dima TNamedPipes редкостная хрень. Пытался разобраться, даже заработало, но с костылями протокол не виноват ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 10:06 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Изопропилпротокол не виноват Не буду спорить, примеры его использования от MS ниасилил. Свои задачи я порешал, а остальное неважно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 10:46 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Есть какие соображения? Обычный COM применить. (межпроцессное взаимодействие будет спрятано в его потрохах) Дмитрий77Порты задаюся явно. А вдруг "свободность" порта сглючит вместе со всей конструкцией. динамически выбрать Дмитрий77Я не люблю добавлять в проекты дополнительные OCX-контролы даже от майкрософт. строй велосипед с квадратными колёсами ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 14.01.2014, 11:17 |
|
||
|
С пониманием NamedPipes никто не поможет? Послать Message между приложениями.
|
|||
|---|---|---|---|
|
#18+
Изопропил,MasterZiv Отличный совет: Изопропил mailslot для связи без гарантии доставки и без установления соединения http://msdn.microsoft.com/en-us/library/windows/desktop/aa365794(v=vs.85).aspx http://www.codeproject.com/Articles/8527/Using-Mailslots-for-Interprocess-Communication... MasterZivЭто более похоже на mailSlots (от MS, параллельная спецификация к NamedPipes). БОЛЬШОЕ ВАМ СПАСИБО И кстати в документации нигде не сказано, что технология устаревшая. === Документация простенькая и понятная. В точности отвечает поставленной задаче. Уже все сделал. Проверил на XP и на Win 2012 R2 и из под "As Service" тоже. Отлично все работает. Я на всякий случай приложил тест-проект, хотя это и VB6. СЕРВЕР-ПРИЕМНИК: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 15.01.2014, 01:21 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38524906&tid=2019763]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
182ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
| others: | 14ms |
| total: | 301ms |

| 0 / 0 |
