Problem mit TCP nach verlassen der Verbindung

  • VB.NET

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Begleiterkubus.

    Problem mit TCP nach verlassen der Verbindung

    Hi,
    ich habe ein Problem mit TCP. Wenn ich meinen TCP-Server im Browser annavigiere, bekomme ich wie normal das HTTP-Protokoll in meinen Logs zu sehen, wenn ich dann in Firefox jedoch die Verbindung abbreche, dann kommen nurnoch leere Zeilen, bis jetzt habe ich dies mittels einer If-Abfrage unterbunden, jedoch ist es nicht die richtige Lösung des Problems.


    Der Code ist aus einem Tutorial.

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IO
    3. Imports System.Net
    4. Public Class frmTCPServer
    5. 'Variablen:
    6. Dim stream As NetworkStream
    7. Dim streamw As StreamWriter
    8. Dim streamr As StreamReader
    9. Dim Server As TcpListener
    10. Dim client As New TcpClient
    11. Dim ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 4000)
    12. Dim mainthread As Threading.Thread
    13. '______________
    14. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    15. mainthread = New Threading.Thread(AddressOf mainserver)
    16. mainthread.Start()
    17. End Sub
    18. Sub mainserver()
    19. Try
    20. Server = New TcpListener(ipendpoint)
    21. Server.Start()
    22. client = Server.AcceptTcpClient
    23. stream = client.GetStream
    24. streamr = New StreamReader(stream)
    25. streamw = New StreamWriter(stream) ' Müsste eigentlich alles Klar sein.
    26. While client.Client.Connected
    27. If Not streamr.ReadLine = "" Then
    28. lstboxLog.Items.Add(TimeOfDay() & " << " & streamr.ReadLine)
    29. End If
    30. End While
    31. Catch
    32. ' Hier wieder eine Fehler behandlung und ein neuen Versuch den Server zu starten...
    33. End Try
    34. End Sub
    35. Private Sub Form1__close(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.FormClosing
    36. Server.Stop()
    37. End
    38. Try
    39. mainthread.Abort()
    40. Catch
    41. End Try
    42. End Sub
    43. End Class


    Das Ganze funktioniert soweit ganz gut, nur wenn die Verbindung verlassen wird ( mittels HTTP ) kommen extrem viele leere Dinge in meine Logs.


    Es muss also irgendwie abgefragt werden können, ob die Verbindung mit dem Client noch besteht, jedoch funktioniert dies nicht mittels client.connected.

    Habt ihr vielleicht eine andere Lösung?

    MfG,
    Begleiterkubus.
    Hi,

    deine Variante dürfte ja sowieso prinzipiell Fehlerhaft sein.
    Denn durch
    If streamr.ReadLine = ""

    Liesst du ja bereits eine Zeile ein!

    Ich würde wahrscheinlich mit dem zugrundeliegenden NetworkStream arbeiten und der Eigenschaft:
    .DataAvailable

    Gruß Mono
    Das ist meine Signatur und sie wird wunderbar sein!
    Natürlich..

    nur nicht beim StreamReader.
    Stream.DataAvailable gibt es sehr wohl...


    Public Overridable ReadOnly Property DataAvailable() As Boolean
    Member von System.Net.Sockets.NetworkStream
    Zusammenfassung:
    Ruft einen Wert ab, der angibt, ob im System.Net.Sockets.NetworkStream Daten für einen Lesevorgang verfügbar sind.

    Rückgabewerte:
    true, wenn im Stream Daten für den Lesevorgang verfügbar sind, andernfalls false.
    Das ist meine Signatur und sie wird wunderbar sein!