StreamReader.Peek() liefert -1 zurück obwohl daten zum lesen da sind
-
Hi
ich greife mit dem StreamReader auf einen Networkstream zu.
Um die Daten auszulesen lass ich StreamReader.ReadLine() in einer while schleife laufen und Peek() prüft ob noch was zum lesen da ist.Mein Problem ist, dass Peek() -1 zurückliefert , obwohl noch was zum lesen da ist.
Ich hab mal den Returnwert von Peek in einer Messagebox ausgeben lassen.
und ReadLine() aus der schleife rausgenommen. Peek liefert -1 zurück aber ReadLine gibt den Text zurück.string text=""; string message=""; while (getmailinfo.Peek() !=-1) { message = getmailinfo.ReadLine(); text += message; }; MessageBox.Show(text); message = ""; text = ""; Thread.Sleep(1000); MessageBox.Show(Convert.ToString(getmailinfo.Peek())); //normaler weise ist da auch ein while(getmailinfo.Peek()!=-1){ message = getmailinfo.ReadLine(); text += message; //} MessageBox.Show(text);
Ich hoffe ihr könnt mir helfen
MFG Pacino
-
Guckst Du hier: http://msdn2.microsoft.com/en-us/library/system.io.streamreader.peek.aspx
Speziell:
An integer representing the next character to be read, or -1 if no more characters are available or the stream does not support seeking.
(jaja, ich weis, in die Doku gucken ist wie schummlen).
-
Und wie sollt ich die Schleife sonst aufbauen damit ReadLine alles ausliest?
ich habs auch schon mit
while((message=getmailinfo.ReadLine())!=null)
probiert allerdings bleibt ReadLine hängen, bis der Server die Verbindung beendet.
-
Sämtliche mir bekannten Netzwerkprotokolle sehen eine Möglichkeit vor zu wissen ob nochwas kommt, auch wenn man nicht "peeken" kann.
Viele textuelle Protokolle verwenden als "Abschluss" einfach ein CR-LF Paar (also CR-LF-CR-LF).Oder es wird vorher mitgeschickt wie viele Zeilen/Bytes/... kommen, dann weiss man auch wann Schluss ist.
Wie soll man es auch sonst machen? Mit nem Timeout etwa? IMO ganz Schlechte Idee...
-
leute... noch nie was von "EOF/EOS" gehört??
Property: StreamReader.EndOfStream
hf