myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- Rund um die Programmierung (https://www.mycsharp.de/wbb2/board.php?boardid=59)
--- Wie realisiert man Kommunikation über Pipes? (https://www.mycsharp.de/wbb2/thread.php?threadid=122092)


Geschrieben von FrankenDerStein am 08.08.2019 um 21:56:
  Wie realisiert man Kommunikation über Pipes?
Hallo liebe Kollegen,

Ich Schreibe an einer Anwendung die 2 Rollen einnimmt.

Die Erste Rolle wird ohne Prameter ausgeführt und arbeitet als Server.
Die Zweite Rolle wird über Parameter ausgeführt und arbeitet als Client.

Die Kommunikation soll über Pipes gesehen.
Laut den Informationen sollte das ja sehr einfach sein.

Aber, nö es funktioniert dem anscheid nicht so einfach.

Folgende Klasse habe zur Kommunikation geschrieben:

Davon gibt es ein Spiegelbild nur für den Client

C#-Code:
class InterCommunicationHandlerServer
    {
        NamedPipeServerStream serverStream;
        public event EventHandler<string> InputEvent;
        Thread observer;
        bool run;
        StreamReader reader;
        StreamWriter writer;
        bool shear;

        public InterCommunicationHandlerServer()
        {
            shear = false;
        }
        public void Start()
        {
            run = true;
            observer = new Thread(new ThreadStart(obseverTh));
            observer.Name = "InterCommunicationHandler";
            observer.Start();
        }

        private void obseverTh()
        {
            do
            {
                if (serverStream != null && serverStream.IsConnected)
                {

                    if (reader != null)
                    {
                        if (InputEvent != null)
                        {
                            string msg = reader.ReadLine();
                            InputEvent(this, msg);
                        }
                    }
                }
                else
                {
                    serverStream = new NamedPipeServerStream("ShareAndReceive", PipeDirection.InOut,200,PipeTransmissionMode.Byte,PipeOptions.Asynchronous);
                    serverStream.WaitForConnection();
                    writer = new StreamWriter(serverStream);
                    reader = new StreamReader(serverStream);
                }
            } while (run);
        }
        public void Stop()
        {
            run = false;
        }
        public void Send(String value)
        {
            if (serverStream.IsConnected)
            {
                writer.WriteLine(value);
                writer.Flush();
            }
        }
    }

Mein Problem ist, dass die Anwendung im Client Modus beim Flush hängen bleibt.

Ich verstehe dies Leider nicht.

Ich hoffe ihr könnt mir helfen.

Mit freundlichen Grüßen, FrankenDerStein.


Geschrieben von Abt am 09.08.2019 um 10:47:
 
Wenn der Code Käse ist, dann können Pipes nichts dafür ;-)

Die offizielle Microsoft Doku hat dafür eigentlich nen gutes Beispiel dafür
 Vorgehensweise: Verwenden von Named Pipes zur prozessübergreifenden Kommunikation über ein Netzwerk

Von meiner Seite aber der Tipp: mit gRPC hast Du einen deutlich moderneren Ansatz, der viel mehr Zeug für Dich managed und quasi fast alle Anwendungszwecke von Named Pipes erfüllt - und vieles auch mehr bietet.


Geschrieben von gfoidl am 09.08.2019 um 17:34:
 
Hallo FrankenDerStein,

ich will Abts Antwort ergänzen / untermauern.

(Named) Pipes sind genauso wie TCP "low level" und i.d.R. ist es nicht nötig so tief (im Stack) selbst zu programmieren. Wesentlich effizienter und komfortabler ist es Frameworks zu verwenden, welche die low level Kommunikation wegabstrahieren. gRPC ist momentan das Maß der Dinge (aktuell auch zurecht).

Pipes, TCP, etc. würde ich nur dass verwenden wenn es nicht anders geht.

mfG Gü


Geschrieben von FrankenDerStein am 13.08.2019 um 22:04:
 
Danke für die Antwort.

Ich werde mich über diese Technologie informieren.

Kennt ihr noch weitere Alternative Technologien?

Mit freundlichen Grüßen, FrankenDerStein.


Geschrieben von Abt am 13.08.2019 um 22:05:
 
Wie bereits gesagt wurde ist gRPC die aktuellste Art und Weise und Maß der Dinge.


© Copyright 2003-2020 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 05.04.2020 06:41