Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/25: Рейтинг темы: голосов - 25, средняя оценка - 4.60
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274

Обмен данными между двумя программами

24.12.2017, 23:26. Показов 5147. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Подскажите, есть ли возможность передавать из одной запущенной копии программы в другую некоторые данные? Пока что придумал - обмен через файл, но это потеря быстродействия, либо затраты ресурсов (чтение файла в бесконечном цикле, либо по таймеру).
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
24.12.2017, 23:26
Ответы с готовыми решениями:

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

Как организовать обмен данными между двумя разными программами?
Как организовать обмен данными между двумя разными программами? Интересует именно схема этого процесса. Предполагается обмен данными в...

Обмен данными между программами
Я работаю в MFC. Я хочу передать данных нескольких переменных из одной в другую программу. Подскажите как это делать? Если передать данные...

8
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
25.12.2017, 05:16
Это делается с помощью WCF. Создаёшь сервис с делегатом и методом для передачи объекта. Клиент вызывает метод передачи, а сервис вызывает всех подписанных на делегат и передаёт им объект.
2
Модератор
Эксперт .NET
 Аватар для Yury Komar
4358 / 3428 / 512
Регистрация: 27.01.2014
Сообщений: 6,258
25.12.2017, 09:03
можно выделить часть памяти ОЗУ и в нее передавать данные, а другое ПО эти данные из этой памяти читает. сейчас не вспомню точно, как это делается. Но на форуме есть примеры...
3
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
25.12.2017, 11:56
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Цитата Сообщение от Yury Komar Посмотреть сообщение
можно выделить часть памяти ОЗУ и в нее передавать данные
Это называется разделяемая память. Есть в Net Framework начиная с 4.
Пример не мой, видел где-то здесь на форуме
Первое приложение:
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Imports System.IO.MemoryMappedFiles
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim message As Char() = TextBox1.Text 'Текст сообщения
        Dim sz As Integer = message.Length 'Размер сообщения
        'Разделяемая память имеет формат: Имя/Размер/Сообщение
        'Здесь sz*2 - размер сообщения в байтах (Тип Char - 2 байта)
        '+4 - добавляем еще 4 байта для записи размера (тип Integer - 4 байта)
        Dim mappedFile As MemoryMappedFile = MemoryMappedFile.CreateOrOpen("MyMessage", sz * 2 + 4)
        'Создаем объект для записи в разделяемую память
        Using writer As MemoryMappedViewAccessor = mappedFile.CreateViewAccessor(0, sz * 2 + 4)
            writer.Write(0, sz) 'записываем размер сообщения
            writer.WriteArray(Of Char)(4, message, 0, message.Length) 'записываем сообщение начиная с четвертого байта
        End Using
        MsgBox("Сообщение отправлено")
    End Sub
End Class

Второе приложение:
Кликните здесь для просмотра всего текста
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
Imports System.IO.MemoryMappedFiles
Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
 
        Dim message As Char() 'Массив для сообщения 
        Dim sz As Integer     'Размер полученного сообщения
        
        Dim mappedFile As MemoryMappedFile = MemoryMappedFile.OpenExisting("MyMessage", sz * 2 + 4)
        'Считываем размер сообщения
        Using reader As MemoryMappedViewAccessor = mappedFile.CreateViewAccessor(0, 4, MemoryMappedFileAccess.Read)
            sz = reader.ReadInt32(0)
        End Using
        'Считываем сообщение
        Using reader As MemoryMappedViewAccessor = mappedFile.CreateViewAccessor(4, sz * 2, MemoryMappedFileAccess.Read)
            message = New Char(sz - 1) {}
            reader.ReadArray(Of Char)(0, message, 0, sz)
        End Using
        MsgBox(message)
    End Sub
End Class
8
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
25.12.2017, 12:50
Лучший ответ Сообщение было отмечено Yury Komar как решение

Решение

Ну и пример с WCF. Исходники и бинарные файлы, чтобы попробовать. host запускает сервис. client отсылает сообщения всем, кто подписался, кроме себя. Также client следит за состоянием сервиса и отображает его полоской внизу формы.
В примере передаётся текст, но можно передавать любые сериализуемые объекты
Вложения
Тип файла: zip TransferObjectsSolution.zip (65.7 Кб, 84 просмотров)
Тип файла: zip Release.zip (37.7 Кб, 69 просмотров)
7
 Аватар для XIST
1960 / 1070 / 148
Регистрация: 01.10.2009
Сообщений: 3,597
Записей в блоге: 1
25.12.2017, 15:58
ViterAlex, блин WCF хорош, жаль нет время на него, а так хорош, а вот работая с WCF, что быстрей, служба win написанная или WCF, нет я понимаю вопрос размытый, но с твоей точки?
0
 Аватар для ViterAlex
8951 / 4863 / 1886
Регистрация: 11.02.2013
Сообщений: 10,246
25.12.2017, 16:07
Цитата Сообщение от XIST Посмотреть сообщение
что быстрей, служба win написанная или WCF
Это разные инструменты. Служба вполне может крутить WCF-сервис. Обычно так и делается. По скоростям ничего не скажу: больших проектов не делал, а на маленьких этого не увидишь. Но поскольку до сих пор жива технология, значит, скорость достаточная. Чисто субъективно, думаю, что WCF помедленнее будет, но это ещё от транспорта зависит.
1
129 / 108 / 24
Регистрация: 11.07.2017
Сообщений: 274
25.12.2017, 19:59  [ТС]
Спасибо всем, теперь надо время, что бы осмыслить.
MrCrown, "MyMessage" - это как имя файла? Т.е. Если у меня будут в двух прогах объекты (экземпляры пользовательского ЭУ) названные одинаково, например Х1, то для реализации передачи данных между ними нужно:
-при изменении в объекте сформировать переменную message
-записать в память
VB.NET
1
Dim mappedFile As MemoryMappedFile = MemoryMappedFile.CreateOrOpen("Х1", sz * 2 + 4)
....
-в таймере с интервалом 10 мс читать и сравнивать, есть ли изменения
VB.NET
1
Dim mappedFile As MemoryMappedFile = MemoryMappedFile.OpenExisting("Х1", sz * 2 + 4)
...
Соответственно, если у меня будет несколько таких экземпляров, то у каждого в зависимости от его обозначения будет своя область в памяти - Х2, ... Х8 и т.д.?
И можно ли создавать, например, в одном приложении 2 объекта Х1 и в другом 1 такой объект Х1 или вообще ни одного?
0
1548 / 1521 / 325
Регистрация: 03.10.2012
Сообщений: 1,551
26.12.2017, 10:46
Цитата Сообщение от rvs_dk Посмотреть сообщение
"MyMessage" - это как имя файла?
rvs_dk, да. Абстрагировавшись от реализации, вы можете представлять себе это как файл, который можно писать и читать как угодно. Вся разница в том, что он находится в памяти. Разумеется, можно создать их сколько угодно, лишь бы уместились в памяти.
Цитата Сообщение от rvs_dk Посмотреть сообщение
Пока что придумал - обмен через файл
По сути, это то же самое.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
26.12.2017, 10:46
Помогаю со студенческими работами здесь

Обмен данными между программами
Всем доброго времени суток! Возникла такая проблема: у меня есть два приложения, одно написано на С++, другое на С#. И необходимо сделать...

Обмен данными между программами
На пример, вызывается программа c помощью system(), она принимает аргументы и работает, а как получить информацию в данном случае от неё?

Обмен данными между программами
Здравствуйте Помогите сделать программу, чтобы при наборе все символов в сервере они сразу же отображались в клиенте, вот похожее, но...

Обмен данными между программами
Подскажите, можно ли одновременно принимать данные из двух или более программ в третьей, например в одной программе цикл от 1 до 100, в...

Обмен данными между программами паскаль
Здравствуйте! Такой вопрос,у меня есть программы их задача получать и считывать данные друг друга с высокой частотой, обмен данными я решил...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru