C# Mehrfach in einen Stream schreiben

Ghost_Rider_R

Lieutenant
Registriert
Nov. 2009
Beiträge
752
Hallo zusammen,

könnte mir bitte jemand sagen, wie ich mehrfach in einen Stream schreiben kann?

Mein Plan sieht wie folgt aus:

while(true){
Instanz1 -> Schreibt Daten in den Stream
Instanz2 -> Ließt die Daten aus dem Stream
}

Aktuell ist es so, dass erst wenn ich den Stream mit Instanz1 schließe, dass Instanz2 die Daten auch abholt, was ja auch gut ist,
aber danach soll der Stream weiterverwendet werden.

Wie stelle ich das am besten an? oder ist ein Stream immer eine einmalige Show und man muss einen neuen Stream aufmachen?

Könnte es sein dass das mit dem BinaryReader/Writer geht?

Danke und LG Ghost
 
Zuletzt bearbeitet:
Ich verstehe nicht ganz dein Problem, du hast ja auch keinen Code gepostet, aber ich denk mal dir fehlt ein Aufruf von Flush nach jedem schreiben, dann kannst du den Stream auch offen lassen.
 
  • Gefällt mir
Reaktionen: rg88
Wie stell ich mir das vor, gleichzeitig? Seriell?

Was Du suchst geht vermutlich in Richtung Pipe, Socket, FIFO, oder sowas.
Nicht sicher, ob das mit Streams geht.
 
Leider habe ich aktuell meinen Code nicht vorliegen. Im Enddefekt möchte ich aber einfach eine Netzwerkkommunikationsklasse schreiben, damit sich später zwei Anwendungen gegenseitig Bytearrays senden (und empfangen) können, ganz klassisch über TCP/IP.

Die Idee mit dem Streams war nur, dass es eventuell einfacher ist, aber vielleicht ist das auch nicht das, was ich brauche.

Wäre es vielleicht ein besserer Ansatz das direkt nur über die Sockets zu lösen?

Später will ich diese Methoden haben, damit ich es für spätere Anwendungen vereinfacht habe:

public void SendenDaten(byte[] daten);
public byte[] EmpfangenDaten();

Falls ich hier nur mit Sockets arbeiten sollte, woher weiß die Gegenstelle, wenn ich mit dem Senden fertig bin?
Am besten gehen wir von dem Vorhaben aus, man möchte z.B. mehrere Dateien hintereinander schicken.

Danke für eure Hilfe

LG Ghost
 
Zuletzt bearbeitet:
NetworkStream ist da die richtige Klasse für, die wrapped die sockets und da kannst du ohne probleme mehrmals reinschreiben und wieder rauslesen. Gibts Unmengen an Tutorials im Netz dafür usw.
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R
@Tornhoof vielen Dank, die schau ich mir heute Abend mal an. Sind ja eher Basis Sachen, die ich damit abdecken möchte, vielleicht ist die ja genau das was ich suche.
 
Ich habe das jetzt mal mit dem TcpClient und dem NetworkStream getestet, das funktioniert soweit super, nur irgendwie habe ich noch einen Bug drin und weiß nicht so recht wo der her kommt.

Nach dem Aufrufen dieser Methode verliert der TcpClient immer die Verbindung:

1643930755231.png


Die Daten schreibt er noch in den NetworkStream, sodass die Gegenseite ihn lesen kann und es kommt auch keine Ausnahme. Hat jemand ne Idee??
 
Du verwendest using, dass den Stream automatisch am Ende schließt und aufräumt obwohl du den Stream wieder verwenden möchtest.
 
  • Gefällt mir
Reaktionen: Ghost_Rider_R
Danke, das hatte ich gestern auch noch gemerkt aber dann kann der andere nicht mehr vom stream lesen, muss da am Ende noch Flush dran oder so?

LG Ghost
 
Hallo zusammen,

ich komme leider absolut nicht weiter, kann hier mal jemand draufschauen was ich falsch mache?
Ich habe mal ein ganz simples Copy & Paste Beispiel erstellt:

C#:
        public static void Main()
        {
            string host = "google.com";
            string seite = "/search?q=networkstream";           
            TcpClient tcp = new TcpClient();
            tcp.Connect(host, 80);
            NetworkStream ns = tcp.GetStream();           
            byte[] daten = Encoding.Unicode.GetBytes(string.Format("GET {0} HTTP/1.0{1}{1}", seite, "\r\n"));
            ns.Write(daten, 0, daten.Length);           
            byte[] buffer = new byte[1024];
            int i = ns.Read(buffer, 0, 1024);                   
        }

Bei der letzten Zeile ns.Read bleibt er immer hängen, das selbe Problem habe ich auch in meiner Bibliothek.

Was läuft da falsch?

Danke und LG Ghost :-)
 
Was läuft da falsch?
Warum verwendest du nicht einfach den HttpClient, wenn du mit einem HTTP Server sprichst bzw. Web-Requests absendest?
Ghost_Rider_R schrieb:
Bei der letzten Zeile ns.Read bleibt er immer hängen, das selbe Problem habe ich auch in meiner Bibliothek.
Was meinst du mit "bleibt hängen"? Läuft der Code nicht weiter?

C#:
        // s = new WhatEverStream()
        s.Position = 0;

        // Now read s into a byte buffer with a little padding.
        byte[] bytes = new byte[s.Length + 10];
        int numBytesToRead = (int)s.Length;
        int numBytesRead = 0;
        do
        {
            // Read may return anything from 0 to 10.
            int n = s.Read(bytes, numBytesRead, 10);
            numBytesRead += n;
            numBytesToRead -= n;
        } while (numBytesToRead > 0);
        s.Close();
 
Zurück
Oben