myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Rund um die Programmierung » Wie realisiert man Kommunikation über Pipes?
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Wie realisiert man Kommunikation über Pipes?

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
FrankenDerStein FrankenDerStein ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.06.2015
Beiträge: 39
Entwicklungsumgebung: Visual Studio Ultimate 2013
Herkunft: Deutschland


FrankenDerStein ist offline

Wie realisiert man Kommunikation über Pipes?

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von FrankenDerStein am 08.08.2019 22:03.

08.08.2019 21:56 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.901
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
09.08.2019 10:47 Beiträge des Benutzers | zu Buddylist hinzufügen
gfoidl gfoidl ist männlich
myCSharp.de-Team

avatar-2894.jpg


Dabei seit: 07.06.2009
Beiträge: 6.548
Entwicklungsumgebung: VS 2019
Herkunft: Waidring


gfoidl ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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ü
09.08.2019 17:34 Beiträge des Benutzers | zu Buddylist hinzufügen
FrankenDerStein FrankenDerStein ist männlich
myCSharp.de-Mitglied

Dabei seit: 18.06.2015
Beiträge: 39
Entwicklungsumgebung: Visual Studio Ultimate 2013
Herkunft: Deutschland

Themenstarter Thema begonnen von FrankenDerStein

FrankenDerStein ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Danke für die Antwort.

Ich werde mich über diese Technologie informieren.

Kennt ihr noch weitere Alternative Technologien?

Mit freundlichen Grüßen, FrankenDerStein.
13.08.2019 22:04 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
Abt
myCSharp.de-Team

avatar-4119.png


Dabei seit: 20.07.2008
Beiträge: 12.901
Herkunft: Stuttgart/Stockholm


Abt ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

Wie bereits gesagt wurde ist gRPC die aktuellste Art und Weise und Maß der Dinge.
13.08.2019 22:05 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 19.08.2019 07:48