Komunikacja między procesami (named pipes i inne IPC) w WPF

0

Witam serdecznie, mam nadzieję że pomożecie mi rozwiązać mój problem.

Projekt nad kórym pracuje składa się z 2 elementów:

  • główne okno WPF (które ma nasłuchiwać wiadomości od apki nr2 i powiedzmy dla uproszczenia wypisywać je w tym oknie - w TextBlock)
  • apka nr2: drugi mniejszy program (aplikacja konsolowa) która ma tylko jedno zadanie - przy każdym jej uruchomieniu wysyła tylko tekst (ścieżke do pliku) przekazaną mu jako argument i od razu się zamyka. Ta mała apka może uruchamiać się bardzo często i za każdym razem posiada inny argument - wysyła tego stringa i się zamyka). Może zdażyć się sytuacja kiedy dwa albo trzy te same apki uruchomią się jednocześnie aby wysłać wiadomość z tekstem do głónego okna.

Przejrzałem już wiele rozwiązań i natknąłem się na wiele problemów - np. okno WPF odbierało tylko jedno wiadomość i więcej już nie chciało albo nie dało się jednocześnie połączyć 3 te małe apki które wysyłają - tylko jedna.

Znacie jakieś sposoby rozwiązania mojego problemu? Z góry dziękuję.

2

Gniazda sieciowe? Jeden serwer + wielu klientów bez problemu będzie działało, a do tego będzie możliwość rozproszenia w razie czego.

0
Ktos napisał(a):

Gniazda sieciowe? Jeden serwer + wielu klientów bez problemu będzie działało, a do tego będzie możliwość rozproszenia w razie czego.

Pewnie tutaj od razu należy skupić się na asynchronicznych, skoro chce otrzymywać wiadomości od kilku klientów nawet jednocześnie?

Update:
Zgodnie z podpowiedziamy w komentarzach - użyłem socketów. Mam teraz dwie aplikacje konsolowe (serwer i klienta). Kod:
Serwer:

Socket serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
Socket internalSocket;
byte[] recBuffer = new byte[256];
serverSocket.Bind(new IPEndPoint(IPAddress.Parse("127.0.0.1"), 1024));
serverSocket.Listen(10);
internalSocket = serverSocket.Accept();
internalSocket.Receive(recBuffer);
Console.WriteLine(ASCIIEncoding.ASCII.GetString(recBuffer));
Console.Read();

Klient:

Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
byte[] recBuffer = new byte[256];
clientSocket.Connect("127.0.0.1", 1024);
clientSocket.Send(ASCIIEncoding.ASCII.GetBytes("Hello world!"));

Działa to tak, że po uruchomieniu serwera zaczyna nasłuchiwać, uruchamiam klienta - przesyła on stringa do serwera i od razu sie zamyka. Do tego momentu jest ok. Jednak chciałbym aby serwer nasłuchiwał nieustannie. Tak abym mógł uruchomić klienta ile razy będe chcial (dla ciągle uruchomionego serwera) a ten cały czas będzie otrzymywał te wiadomości.
Jakieś propozycje?

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