komunikacja miedzy programami

0

witam, na wstepie powiem ze problem jest duzo bardziej zlozony, bedzie dotyczyl gry w ktorej programy beda wywalizowac miedzy soba chocby w kolko i krzyzyk, program 'arbiter' bedzie sprawdzal czy wyjscia i wejscia są zestandaryzowane oraz wprowadzal ograniczenia czasowe.

dodam tez ze rozwiazanie powinno dzialac na linux i na win, oraz nie opierac sie o pliki pomocnicze/textowe.

w uproszczonej wersji pytanie brzmi. jak sprawic aby odpalić trzy programy (player1, player2, arbiter) tak ze arbiter wysyla do pierwszego programu int n=1, program pierwszy zwieksza n o wygenerowana przez siebie liczbe z przedzialu 1-10 i ją zwraca, a arbiter sprawdza czy ona nie jest wieksza od 100 i czy program nie pracowal dluzej niz 5sec, jesli nie to program podaje ta wartosc playerowi 2, ten generuje sobie znowu jakas liczbe o ktora zwiekszy sume i znowu zwroci ja do arbitra

prosze o szczegolowe wskazowki jak mozna dokonac takiej komunikacji miedzy dzialajacymi ciagle programami (player 1 i 2 nie zostaja wylaczane ani na chwile podczas calej gry)

mam na mysli rozwiazanie w c++

0

Takie rzeczy uzyskuje się po prostu przekierowując standarowe wejscie i wyjście graczy poprzez arbitra. W różnych systemach osiąga się to na różne sposoby. Najpierw odpalasz arbitra, powiedzmy jako argumenty podajesz mu nazwy dwóch programów, które on odpala i przekierowuje ich strumienie aby się z nimi komunikować. Cała filozofia - przekierowanie strumieni było już omawiane wielokrotnie.

0

przeszukalem forum i nic, na haslo 'przekierowanie strumieni' odpowiada tylko ten post i jeszcze ten http://4programmers.net/Forum/402707?h=przekierowanie#id402707 . do tego nie znalazlem tez nic pod 'stumieni' ani "przekierowanie". bede wdzieczny jesli znajdzie sie jakis dobry czlowiek i poda dobrym artykulem tlumaczacym od podstaw.

0

To jest dla Delphi, ale pewnie piszesz pod C/C++. Przynajmniej zrozumiesz ideę.

http://4programmers.net/Forum/405330#id405330

0

deus podaj pomocna dlon zablakanej duszy. przeszukalem to forum i naprawde nie znalazlem rozwiazania. masz racje to nie moze byc jakies trudne bo ten aplet http://www.mimuw.edu.pl/KNI/ITPW/aplety/aplet-2007.zip to robi, tylko jak ?

0

pod linkeim jest:

Zabroniony dostęp!
Nie masz dostępu do żądanego obiektu. Jest on zabezpieczony przed odczytem lub nie może być odczytany przez serwer.

Jeśli myślisz, że jest to błąd tego serwera, skontaktuj się z administratorem.

Error 403
www.mimuw.edu.pl
Apache/2.2.2 (Unix) mod_ssl/2.2.2 OpenSSL/0.9.7i PHP/5.1.6 mod_fastcgi/2.4.2

0

to skopiuj link do paska url przegladarki T.T

0

Hm jeżeli chodzi o to by program mogł pracować jednocześnie na Win\Linux to to niewiem czy jest jakiś element standardowej biblioteki c++ który na to pozwoli(oczywiście wykluczając współdzielenie pliku).

Jeżeli chodzi o linux'a to jak już było wspomniane pipe'y i forkować playerów. Jeżeli jednak arbiter nie powinien uruchamiać procesów potomnych(player'ów) no zostają named pipe's. Możesz również wykożystać kolejke komunikatów ale w windzie będziesz potrzebował uchwytu do którego będziesz to wysyłał.

Kolejnym rozwiązaniem jest shared memory, ale niewiem jak z tym jest w windzie.
Jeszcze innym rozwiązaniem są sockety i jest to jedno z wygodniejszych bo kod dla windy i linux'a będzie się nieznacznie różnił.

No ale decyzja należy do ciebie.

PS w przypadku użycia czegoś innego niż sockety mogą się przydać semafory lub podobne twory by zapanować nad czasem oczekiwania na odpowiedz od konkretnego programu, a w przypadku socketów to time out'y powinny załatwić sprawe

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