Komunikacja między aplikacjami

0

Witam.

Mam następujące pytanie.

W jaki sposób mogę skomunikować dwie osobne aplikacje?
Dokładniej to chodzi mi o stworzenie jakiegoś protokołu transmisji, np. przez porty, w ramach tego samego komputera (nie przez sieć). Obie te aplikacje tworzę samemu i chcę pomiędzy nimi przekazywać dane.

Zastosowałem metodę FindWindow() i SendMessage(), ale to jest zbyt wolne i obciążające. Próba znlezienia czegoś na forach nic mi nie dała.

Za pomoc z góry dzięki.

0

jak porty, to chyba raczej masz na mysli sockety a nie COM?:) po prostu piszesz tak jak sieciowo, ale uzywasz adresu docelowego 'localhost' albo 127.0.0.1

inne - pliki, komunikaty (sam widzisz), pipe'y, shared memory.. szukaj w google IPC (interprocess communication)

0

Opisz dokładniej co ma być przesyłane, kiedy, ile, w jaki sposób, jaka synhcronizacja. Mechanizmów komunikacji jest wiele, opisz dokładniej programy a będzie można dobrać odpowiedni.

0

Zamierzam przesyłać krótkie ciągi znaków będące wartościami liczbowymi i krótkimi komendami. Synchronizacja nie jest mi potrzebna. Ma to być taka główna aplikacja wyświetlająca dane z kilkunastu innych aplikacji, bez potrzeby "doglądania" każdej z osobna. Interesuje mnie coś najprostszego, aby nie było na wyrost.

Jeżeli możecie to podajcie jakieś linki, lub literaturę. Dzięki za zainteresowanie.

0

To moze pamiec wspoldzielona? To nawet by pasowalo - kazda z tych kilkunastu aplikacji umieszcza dane w obszarze pamieci o innej nazwie, z gory ustalonej. A aplikacja glowna wszystko to w petli odczytuje co jakis czas.
Proste rozwiazanie i bardzo szybkie.

0

To by mi pasowało. Nawet myślałem o czymś takim, tylko bałem się że sobie ze wskaźnikami nie poradzę. Możesz mi jakieś konkrety dać, bo w googlach nic na szybko nie znalazłem?

//to spróbuj na wolno... :[ - R

0

albo - NamedPipe's lub sockets... aplikacja-obserwator wystawia named pipe'a a obserwowani pisza na niego. latwiejsze w implementacji ale ma ten minus, ze jesli socket - to obserwator musi startowac pierwszy ( a w NP - klienci musza je stworzyc jesli nie istnieje bo obserwator odpalil sie po nich.. ale to tak jak named shmem..)

0

@sensi
Sory ale przestan sie blaznic, bo nic nie szukales - sam widzialem na CodeProject gotową klasę do obslugi named shmem - wszystko juz napisane tak, ze nawet w szczegoly implementacji wglebiac sie nie musisz, uzywasz na zasadzie WriteSharedMemory(nazwa,wartosc), ReadSharedMemory(nazwa, wartosc). Bardzo ładnie napisane przy użyciu Singletona i STL-a

Czyli wszystko czego ci potrzeba masz gotowe - adresu nie podam bo nie pamietam. Musisz poszukac "na wolno"

0
sensi napisał(a)

Zamierzam przesyłać krótkie ciągi znaków będące wartościami liczbowymi i krótkimi komendami.
W takim razie użyj komunikatów. Nie wiem dlaczego sądzisz, że są zbyt wolne, może wolny kod napisałeś. Komunikaty będą tu pasować jak ulał. W jednym komunikacie możesz przesłać jego identyfikator (komendę) oraz 8 bajów innych danych, np 2 liczby double.
Rozwiązanie jest proste jak but, nie wymaga synchronizacji ani międzyprocesowej ani z własnym IDE.

sensi napisał(a)

Zamierzam przesyłać krótkie ciągi znaków będące wartościami liczbowymi
Jeśli te ciągi będą znacznie dłuższe jak 8 bajtów to komunikat może informować o gotowości ich odebrania w strumieniu albo pamięci współdzielonej.

@sensi: nie wysiliłeś się za bardzo w opisie. Zresztą dlatego tyle różnych odpowiedzi dostałeś. Jakbyś lepiej sprecyzował to co chcesz napisać to dobrałoby się odpowiednie rozwiązanie. Na razie to możemy dywagować co będzie lepsze.

Na razie mogę powiedzieć, że sama pamięć współdzielona nie wystarczy jeśli mają być przesyłane komendy. Nada się do przesłania większej ilości danych.
Strumień nadałby się do obydwu zadań, jednak wymaga synchronizacji z IDE aplikacji i będzie trudniejszy do implementacji.
Pętla komunikatów nadaje się do przesyłania komend lepiej jak strumienie, ale nie prześlesz nimi wielu danych.

Jak dużo danych jest do przesłania ?
Czy w danym czasie dane wysyła tylko jeden proces, zanim nie zostaną odebrane ?
Wysyłanie danych jest jedno czy dwukierunkowe ?
Jak często wysyłane są dane a jak często komendy ?
Jakie IDE mają procesy ? Graficzne czy konsola ?
Ile jest procesów ? Zawsze 2 te same ?

0

Rozwiązanie jest proste jak but, nie wymaga synchronizacji ani międzyprocesowej ani z własnym IDE.

A shmem to wymaga? W tym przypadku raczej nie, co niby sie stanie skoro tylko jedna aplikacja odczytuje po kolei kolejne bloki shmem. A aplikacje "podrzedne" tez umieszczaja dane kazda w oddzielnym swoim bloku pamieci i nigdy nie bedzie zadnego konfliktu... wg mnie tutaj zadnej synchronizacji nie potrzeba,

Komunikaty moze i proste jak but, ale klopotliwe jednak i na pewno wolniejsze bo kilkanascie aplikacji bedzie przesylac na raz komunikat do jednego okna... zreszta nie ma nic szybszego od pamieci wspoldzielonej. Poza tym 8 bajtow to nie za wiele, a co jak trzeba bedzie przeslac dlugi ciag znakow? Znow kombinowanie

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