Stream von Server in TextBox leiten

  • VB.NET
  • .NET (FX) 4.0

Es gibt 30 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Stream von Server in TextBox leiten

    Hallo zusammen,

    ich verwende den Server aus dem "Ausführliches TCP und UDP Tutorial". Nun möchte ich den beim Server ankommenden Stream in eine TextBox leiten.

    Auf Code (Server) verzichte ich, da ich den Server genau so verwendet haben, wie er im Tut beschrieben wurde.

    Was ich aber schon probiert habe (in der Sub mainserver):

    VB.NET-Quellcode

    1. Dim i As Boolean
    2. i = True
    3. While (i = True)
    4. RichTextBox.AppendText(StreamReader.ReadLine)
    5. End While

    Lt.Winters schrieb:

    probiert
    habe ich dies:

    VB.NET-Quellcode

    1. Dim pfad = "C:\Temp\Test.txt"
    2. Using sr As IO.StreamReader = New IO.StreamReader(pfad)
    3. TextBox1.Text = sr.ReadToEnd
    4. End Using
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Sry Rod aber iwie steig ich da grad nicht durch. Was hat denn ein SR für eine Datei mit dem SR für einen TCP-Server zu tun?

    Ich habe einen Server (Code siehe Ausführliches TCP und UDP Tut...Link steht oben) mit einer Verbindung und den ankommenden Stream würde ich gerne in eine RichTextBox leiten.

    Lt.Winters schrieb:

    SR
    Beide haben die Basisklasse Stream und Du kannst einen StreamReader von einem anderen Stream erstellen:

    VB.NET-Quellcode

    1. Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
    2. Using client As New TcpClient
    3. client.Connect("1.2.3.4", 56789)
    4. Dim stream As NetworkStream = client.GetStream
    5. Using sr As IO.StreamReader = New IO.StreamReader(stream)
    6. TextBox1.Text = sr.ReadToEnd
    7. End Using
    8. End Using
    9. End Sub

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Also einen wirklichen Unterschied kann ich da jetzt zu deinem Code nicht feststellen.

    VB.NET-Quellcode

    1. Public Class Form2
    2. Dim stream As NetworkStream
    3. Dim streamw As StreamWriter
    4. Dim streamr As StreamReader
    5. Dim Server As TcpListener
    6. Dim client As New TcpClient
    7. Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4713)
    8. Dim mainthread As Threading.Thread
    9. Private Sub Form2_Load(sender As Object, e As EventArgs) Handles MyBase.Load
    10. mainthread = New Threading.Thread(AddressOf mainserver)
    11. mainthread.Start()
    12. End Sub
    13. Sub mainserver()
    14. Try
    15. Server = New TcpListener(ipendpoint)
    16. Server.Start()
    17. client = Server.AcceptTcpClient
    18. stream = client.GetStream
    19. streamr = New StreamReader(stream)
    20. streamw = New StreamWriter(stream)
    21. Dim i As Boolean
    22. i = True
    23. While (i = True)
    24. RichTextBox1.AppendText(streamr.ReadToEnd)
    25. End While
    26. Catch
    27. End Try
    28. End Sub
    29. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    30. streamw = New StreamWriter(stream)
    31. Dim Befehl As String = TextBox1.Text
    32. streamw.WriteLine(Befehl)
    33. streamw.Flush()
    34. TextBox1.Clear()
    35. End Sub
    36. Private Sub Form2__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
    37. Server.Stop()
    38. Try
    39. mainthread.Abort()
    40. Catch
    41. End Try
    42. End Sub
    43. End Class

    Lt.Winters schrieb:

    einen wirklichen Unterschied
    sehe ich hier in dieser Endlosschleife:

    Lt.Winters schrieb:

    VB.NET-Quellcode

    1. While (i = True)
    2. RichTextBox1.AppendText(streamr.ReadToEnd)
    3. End While

    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Lt.Winters schrieb:

    dauerhaft
    Was passiert denn mit dem Stream, wenn er leergelesen wurde?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ja aktuell passiert leider gar nichts. Das ist ja mein Problem :/ Die RTB wird nicht gefüllt.

    Hast du denn einen Tipp wie ich das anders lösen könnte? Weil ich möchte ja dauerhaft empfangen und nicht nur einmalig, da ich ja nicht weiß wann da was ankommt.

    Lt.Winters schrieb:

    Die RTB wird nicht gefüllt.
    Was passiert einmalig bei meinem Code?
    Versuch mal diese Frage zu ergründen, das ist nicht bloß dahergeplappert:

    RodFromGermany schrieb:

    Was passiert denn mit dem Stream, wenn er leergelesen wurde?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!

    Lt.Winters schrieb:

    Sicher bin ich mir da aber nicht.
    Da solltest Du mal hart bei MSDN recherchieren.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Mach das Try-Catch Konstrukt weg. Dann bekommst du eine schöne InvalidOperationException.
    Du kannst aus einem Nebenthread nicht in der GUI schreiben. Das kann nur der Thread der die GUI erstellt hat.

    Arbeite mit Invoke und es wird funzen:

    VB.NET-Quellcode

    1. 'Try
    2. Server = New TcpListener(ipendpoint)
    3. Server.Start()
    4. client = Server.AcceptTcpClient
    5. stream = client.GetStream
    6. streamr = New StreamReader(stream)
    7. streamw = New StreamWriter(stream)
    8. Dim i As Boolean
    9. i = True
    10. While (i = True)
    11. 'RichTextBox1.AppendText(streamr.ReadToEnd)
    12. Me.Invoke(Sub()
    13. RichTextBox1.AppendText(streamr.ReadToEnd)
    14. End Sub)
    15. End While
    16. 'Catch
    17. 'End Try


    lg
    ScheduleLib 0.0.1.0
    Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

    Lt.Winters schrieb:

    das ist das Problem
    Eher nicht, denn sonst hättest Du uns eine Exception mit threadübergreifendem Vorgang gemeldet. :/
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Das wird aber doch durch den Try...Catch-Block unterdrückt oder nicht?


    Edit: Habs mal mit

    VB.NET-Quellcode

    1. Catch ex As Exception
    2. MsgBox(ex.Message)
    3. End Try


    Überprüft...ne Meldung kommt tatsächlich nicht. :/

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Lt.Winters“ ()

    Unterdrückt und behandelt sind zwei grundverschiedene Dinge. Du unterdrückst wirklich nur...
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    Es war einmal ein kleiner Bär... der wollte eine Geschichte hörn... Da erzählte ihm seine Mutti:
    ... Nun solltest es selber wissen. :'D

    Lt.Winters schrieb:

    unterdrückt
    weggeblendet, ignoriert.
    Mach das Try / Catch sofort raus, schließlich willst Du Fehler finden und beseitigen.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!