TCP Chat - Server nimmt nach Client.close keinen neuen Clients an

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Gonethu.

    TCP Chat - Server nimmt nach Client.close keinen neuen Clients an

    Guten Abend zusammen.

    Ich habe mich mal wieder an eine TCP Sache rangeworfen doch treffe auf ein Problem.

    Bei meinem TCP Chat stört mich folgendes Problem:

    Das Verbinden zu meinem TCP Server klappt super genauso wie das weiter Senden von Nachrichten. Doch sobald sich ein Client vom Server trennt, nimmt
    der Server keinen neuen Clients an. Ich habe schon irgendwie was davon gelesen, einen neuen "client" zu erstellen sobald sich einer vom Server trennt,
    doch habe nichts passendes gefunden.

    Deshalb brauche ich jetzt ein wenig Hilfe von euch :)

    Server Code: (Den Code habe ich zum Teil auch von hier kopiert)

    Spoiler anzeigen

    VB.NET-Quellcode

    1. Dim localAddr As IPAddress = IPAddress.Any
    2. Dim listener = New TcpListener(localAddr, Port)
    3. listener.Start()
    4. Do
    5. Console.WriteLine("-------------------------" & Environment.NewLine)
    6. Console.WriteLine("Server läuft..." & Environment.NewLine)
    7. Console.WriteLine("Warte auf Client..." & Environment.NewLine)
    8. Console.WriteLine("-------------------------" & Environment.NewLine)
    9. While True
    10. Dim client = listener.AcceptTcpClient()
    11. Try
    12. c.stream = client.GetStream
    13. c.streamr = New StreamReader(c.stream)
    14. c.streamw = New StreamWriter(c.stream)
    15. c.nick = c.streamr.ReadLine
    16. list.Add(c)
    17. Console.WriteLine(Time & c.nick & " has joined.")
    18. Do
    19. Try
    20. Dim tmp As String = c.streamr.ReadLine
    21. Console.WriteLine(Time & c.nick & ": " & tmp) 'Hier muss irgendwo
    22. SendToAllClients(Time & c.nick & ": " & tmp) 'der Fehler sein
    23. Catch
    24. list.Remove(c)
    25. Console.WriteLine(Time & c.nick & " has exit.")
    26. SendToAllClients(Time & c.nick & " has exit.")
    27. client.Close()
    28. Exit Do 'Auch hier schon ein paar Sachen probiert
    29. End Try
    30. Loop
    31. Catch ex As Exception
    32. MsgBox(ex)
    33. End Try
    34. 'client.Close()
    35. End While
    36. Loop

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

    Jo, ein unsachgemäßer Umgang mit TryCatch machts Debuggen immer ziemlich schwierig.
    also probierma so:

    VB.NET-Quellcode

    1. Dim localAddr As IPAddress = IPAddress.Any
    2. Dim listener = New TcpListener(localAddr, Port)
    3. listener.Start()
    4. Do
    5. Console.WriteLine("-------------------------" & Environment.NewLine)
    6. Console.WriteLine("Server läuft..." & Environment.NewLine)
    7. Console.WriteLine("Warte auf Client..." & Environment.NewLine)
    8. Console.WriteLine("-------------------------" & Environment.NewLine)
    9. While True
    10. Dim client = listener.AcceptTcpClient()
    11. c.stream = client.GetStream
    12. c.streamr = New StreamReader(c.stream)
    13. c.streamw = New StreamWriter(c.stream)
    14. c.nick = c.streamr.ReadLine
    15. List.Add(c)
    16. Console.WriteLine(Time & c.nick & " has joined.")
    17. Do
    18. Dim tmp As String
    19. Try
    20. tmp = c.streamr.ReadLine
    21. Catch
    22. List.Remove(c)
    23. Console.WriteLine(Time & c.nick & " has exit.")
    24. SendToAllClients(Time & c.nick & " has exit.")
    25. client.Close()
    26. Exit Do 'Auch hier schon ein paar Sachen probiert
    27. End Try
    28. Console.WriteLine(Time & c.nick & ": " & tmp) 'Hier muss irgendwo
    29. SendToAllClients(Time & c.nick & ": " & tmp) 'der Fehler sein
    30. Loop
    31. End While
    32. Loop
    vermutlich löst das nicht das Problem, aber kann sein es bringt dich der wahren Fehlerquelle näher.
    (vlt. aber auch nicht)