Mit StreamReader Dauerhaft Netzwerkstream abhören

TsEnG

Mitglied
Hallo,

ich habe vor einen Port dauerhaft abzuhören, der Klartext sendet. Diesen Klartext möchte ich dann auf der Konsole ausgeben. Wie bekomme ich das hin, das der Port Dauerhaft abgehört wird.

Mit meinem ProgrammCode wird nur die erste Zeile gelesen. Aber um das dauerhaft zu machen muss ich doch keine Endlosschleife darein Programmieren

Hier der QC in c#

Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Net;
using System.Net.Sockets;

namespace ConsoleApplication1
{
    class Program
    {
        public static void Main()
        {
            TcpClient client = new TcpClient();

            try
            {
                Console.WriteLine("Attempting to connect to the server on port 8000.");
                client.Connect(IPAddress.Parse("192.168.168.10"), 9300);
                Console.WriteLine("Connection established.");

                NetworkStream stream = client.GetStream();

                using (NetworkStream networkStream = client.GetStream())
                {
                    using (StreamReader reader = new StreamReader(networkStream))
                    {
                        Console.WriteLine(reader.ReadLine());
                    }
                }

            }
            catch (Exception e)
            {
                Console.WriteLine("Error..... " + e.StackTrace);
            }

                Console.ReadLine();
        }
     }
}
 
Gut,

habe das jetzt mal in eine Endlosschleife hineingepackt, nun kommt es aber natürlich vor das ein und der Selbe Text vom Stream mehrfach ausgegeben wird. Nun weiß ich nicht ob er auch mehrfach vom Stream gelesen? Das die Endlosschleife zu schnell ist Wie kann ich es hinbekommen das jede Zeile vom Stream nur einfach ausgegeben wird?

thX

Code:
...

                NetworkStream stream = client.GetStream();

                NetworkStream networkStream = client.GetStream();
                StreamReader reader = new StreamReader(networkStream);
                while(true)
                {
                        Console.WriteLine(Convert.ToString(reader.ReadLine()));
                }

...
 
Moin. :)

1.
Dieses Convert.ToString brauchst nicht, ReadLine gibt dir schon einen String zurück!

2.
Wie schaut denn der Sender aus? ReadLine liest vom Stream, und was er gelesen hat, liest er nicht nochmal.
Wenn du die slebe Zeile immer wieder bekommst, schauts eher so aus, dass der Sender sie mehrfach schickt.

lg,..
 
Hallo

Da der Code vom Sender fehlt, hier einmal eine Vermutung:
Der Empfänger liest Zeile für Zeile, daher muss der Sender auch Zeile für Zeile senden. Du kannst beim Sender die Methode
Code:
Flush()
Verwenden. Dadurch wird der Buffer geleert und in den Stream geschrieben.
 
Hm den Sender kenne ich nicht da es ein anderes Programm ist. Aber der Sender wird immer wieder eine neue Nachricht senden.
 
Sers,
ich weis nicht, ob ich dein Problem richtig verstanden habe :confused: (wenn die Antwort nicht passt oder falsch ist dann lösche sie einfach).
Du könntest in deiner Endlos while doch ein if reinbauen, des den ausgabestream mit nem string vergleicht, der den string wenn if = true auf den ausgabestream setzt. :pNa verstanden?:confused: also ich beim ersten mal durchlesen nicht!!:D Der Code sollte licht ins dunkel bringen.:)
Code:
string speichrung = "";
while(true)
{
    if (speicherung != reader.ReadLine())
    {
        speicherung = reader.ReadLine();
        Console.WriteLine(speicherung);
    }
}
ps. entschuldigt bitte wenn da ein fehler drin ist, habs grade einfach mal hingeklatscht.
Wenn du nur immer was schreiben willst, wenn was neues kommt, dann müsste des eigentlich so gehen.

psps wie gesagt, wenns nicht passt oder auch falsch ist dann schmeiß des einfach raus. Kannst mir ja dann vielleicht noch sagen warum des nicht gehen würde oder warum des nicht des richtige für dich ist.

Grüße Nico.
 
Zuletzt bearbeitet:
Zurück