Stream Auslese problem

  • VB.NET

Es gibt 2 Antworten in diesem Thema. Der letzte Beitrag () ist von Dodo.

    Stream Auslese problem

    Ich bin gerade dabei mich ein wenig mit POP3 zu beschäftigen und habe zum Testen erstmal ein eigenes Interface geschrieben. Nun habe ich aber Probleme den Stream auszulesen. Mein aktueller Code ist folgender:

    VB.NET-Quellcode

    1. Dim Client As New Net.Sockets.TcpClient
    2. Dim POP3Stream As Net.Sockets.NetworkStream
    3. Client.Connect("pop.gmx.de", 110)
    4. POP3Stream = Client.GetStream


    Zum senden:

    VB.NET-Quellcode

    1. Sub send(ByVal command As String)
    2. Dim data() As Byte = System.Text.Encoding.ASCII.GetBytes(command & vbNewLine)
    3. POP3Stream.Write(data, 0, data.Length)
    4. TextBox2.Text &= command & vbNewLine
    5. End Sub


    Empfangen:

    VB.NET-Quellcode

    1. Sub getResponse()
    2. Dim sr As New System.IO.StreamReader(POP3Stream)
    3. Dim sb As New System.Text.StringBuilder
    4. Do While sr.Peek > -1
    5. sb.AppendLine(sr.ReadLine)
    6. Loop
    7. TextBox2.Text &= sb.ToString()
    8. End Sub


    Verbinden geht auch soweit, jedoch wenn ich jetzt den Befehl "LIST" sende wird mir nur 1 Zeile zurückgegeben mit "+OK" aber eigentlich müssten noch 3 weitere Zeilen erscheinen, nämlich
    1 6534
    2 23564
    3 5455

    für die 3 Mails in meinem Postfach. Wenn ich zu beginn des StreamReaders ein Thread.Sleep(1000) setzt funktioniert es auch. Aber das kann doch die Lösung sein oder? Ich meine wenn man nun eine langsame Verbindung hat oder eine lange Liste, dann dauert es nunmal etwas bis die übermittelt wird und das kann man ja nicht mit einer statischen Zeit bewerkstelligen, eigentlich soll der Reader solange lesen bis nichts mehr ankommt und dann erst ausgeben.

    Edit:
    Was vielleicht noch zu sagen ist, im Stream ist alles drin, wird nur nicht ausgegeben, wenn ich nun nochmal den response ausführe wird mir alles Ausgegeben, aber ich müsste somit

    Send("LIST")
    getResponse()
    getResponse()

    machen!

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Dodo“ ()

    vllt gibt es sowas wie

    VB.NET-Quellcode

    1. Do
    2. Console.WriteLine(getResponse())
    3. Loop Until getResponse() = "EOF" 'oder was auch immer


    getResponse muss irgendwann wenn es keine Daten mehr erhält ein EOF oder ein Signal bekommen was einem sagt das die Übertragung vollständig ist ...

    hier gibets das alles auch nochmal: vb.net

    was ich meine findest ist die methode: 'Private Sub CheckResponse(ByVal Response As String)'