Komunikacja pomiędzy programami

0

Witam,

Muszę napisać 3 programy, które będą wymieniały dane pomiędzy sobą. Wiem że jest dużo możliwości, ale w związku z tym, że nie mam doświadczenia w tym temacie, chciałbym zapytać, jak w jaki najprostrzy i najpraktyczniejszy sposób komunikować się pomiędzy aplikacjami. Co polecacie?

Z góry dzięki.

0

Nie ma jednoznacznej odpowiedzi, każdy lubi co innego.
Wybór konkretnej technologii i tak powinien się opierać na jakichś przesłankach technicznych, co chcesz przesyłać i jaka jest architektura tego systemu?

0

Chcę wysyłać komunikaty do WindowsGame z WindowsForm, myślałem o stworzeniu połączonych wirtualnych portów szeregowych, ale to nie ma sensu ;)

0

Wszystko zależy od zastosowania, musisz nieco sprecyzować problem. Do tego pytania pasują wszystkie rozwiązania począwszy od przerzucania danych protokołem UDP, poprzez wszelkiej maści WebService'y, do synchronizacji raz na dobę poprzez skopiowanie plików między komputerami :) Robisz grę, komunikator, aplikację bazodanową, czy coś jeszcze innego? Wymiana danych w ramach jednego komputera, w ramach jakiegoś LANu, czy z udziałem jakiegoś centralnego serwera dostępnego w internecie?

0

Aplikacje będą pracowały na jednym komputerze. Chodzi mi o to, że w windows form będę zadawał jakieś parametry, będą wykonywane obliczenia, zostaną one wysłane do 2 innych programów w których zostaną wyrysowane przez XNA.

0

To może memory mapped files? Raczej trudno o szybsze rozwiązanie w przypadku jednej maszyny.

0

Messaging, np. MSMQ

0
gdfgddg napisał(a):

Messaging, np. MSMQ

I weź to potem debuguj.

0

A nie lepiej po prostu odczytywać prosto z pamięci pierwszego programu ? jak podajesz dane w pierwszym programie to on jest zapisuje do konkretnych zmiennych i pod danym adresem w ramie te dane są przechowywane, a wtedy na 2 i 3 programie odczytujesz wartości z tych adresów :P

0

Ok, a jak przekazać adresy zmiennych z programu do programu?? Dodam że 2 aplikacje renderujące odpalam przez System.Diagnostics.Process.Start(@"WindowsGame1.exe");

Nie było pytania ;) Dzięki, już wszystko działa ;)

0

Widzisz ? Jestem nowy na forum, a już pomogłem lepiej niż większość specuf z forum :D

0

@Dzonzi to Twoje rozwiązanie to takie trochę hackowanie swojej własnej aplikacji. Jest mnóstwo technologii, które pozwalają na osiągnięcie celu jaki postawił sobie autor wątku bez takich spartańskich metod :)

0

Każde rozwiązanie jest dobre jeżeli działa. A co jeżeli nie mamy wglądu do drugiego programu ? np. chcemy żeby nasz własny program odczytywał wartości temperatur z OCCT. Jak to wtedy można zrobić ? Chyba odczytywanie prosto z pamięci jest jedynym wyjściem

0
Dzonzi napisał(a):

Każde rozwiązanie jest dobre jeżeli działa.

Przemyśl jeszcze raz to, co napisałeś, bo to dyskwalifikuje dalszą dyskusję.

0

Lepiej proste rozwiązanie, które działa niż najbardziej skomplikowane, zaawansowane i szybkie, ale nie działające.

0
Dzonzi napisał(a):

Lepiej proste rozwiązanie, które działa niż najbardziej skomplikowane, zaawansowane i szybkie, ale nie działające.

Podsumujmy ;)
Czyli jeśli posiadam klasę Trójkąt w swoim programie i coś z nią robię, a nagle zmieniają się założenia i potrzebuje również klasę Kwadrat to najprostszym rozwiązaniem będzie skopiowanie klasy Trójkąt zmiana jej nazwy i przepisanie metod tak, że działały prawidłowo, jeśli jakieś metody będą miały takie samo działanie to zostawiamy w obu miejscach ten sam kod, a nóż się kiedyś przyda.

1
Dzonzi napisał(a):

Lepiej proste rozwiązanie, które działa niż najbardziej skomplikowane, zaawansowane i szybkie, ale nie działające.

Najprostszym i najszybszym rozwiązaniem są memory mapped files. Łatwe i wydajne są również named pipes. Proste, ale znacznie wolniejsze są zwykłe pliki. Nieco bardziej zaawansowane są kolejki albo bazy danych, za to pozwalają na komunikację między wieloma maszynami, czyli są tutaj niepotrzebne.

Czytanie z zarządzanej przez CLR i ciągle zmienianej przez GC pamięci jest najtrudniejszym ze wszystkich zaproponowanych rozwiązań. Na dodatek nie ma szans działać, bo jest raczej niewykonalne. Jeśli się mylę, to chętnie zobaczę jakiś dowód w postaci kodu - proszę o to już TRZECI raz.

0

Ja też jestem ciekawy tego rozwiązania - bo skoro można tak jak pisze Dzonzi, to po co opracowuje się technologie komunikacji między procesami.
W końcu przy uruchomieniu procesu, system przydziela dla niego pamięć i jest to pamięć chroniona (mechanizmy ochrony pamięci).

Co to tematu, ja w komunikacji kilku aplikacji na tym samym komputerze używam WCF i named pipes

1 użytkowników online, w tym zalogowanych: 0, gości: 1