Multiserver(TCP) Kick Funktion

  • VB.NET

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von XxMoritz99xX.

    Ja so wie ich das beschrieben hab...

    Google nach Schleife bzw Liste durchlaufen, und IF um den Nick zu prüfen.. Connection(index) liefert dir alles was du brauchst.. Aber anscheinend hast du nur C&P gemacht, und verstehst nicht wirklich was du da vor dir hast.
    so also soweit bin ich jetz schon das ich wenn man /kickBenutzername eingibt eine msgbox beim server erscheint.

    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.IO
    3. Imports System.Net
    4. Module Module1
    5. Private server As TcpListener
    6. Private client As New TcpClient
    7. Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, 50021) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein! Private list As New List(Of Connection)
    8. Private Structure Connection
    9. Dim stream As NetworkStream
    10. Dim streamw As StreamWriter
    11. Dim streamr As StreamReader
    12. Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
    13. End Structure
    14. Private Sub SendToAllClients(ByVal s As String)
    15. For Each c As Connection In list ' an alle clients weitersenden.
    16. Try
    17. c.streamw.WriteLine(s)
    18. c.streamw.Flush()
    19. Catch
    20. End Try
    21. Next
    22. End Sub
    23. Sub Main() Console.WriteLine("Der Server läuft!")
    24. server = New TcpListener(ipendpoint)
    25. server.Start()
    26. While True ' wir warten auf eine neue verbindung...
    27. client = server.AcceptTcpClient
    28. Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
    29. c.stream = client.GetStream
    30. c.streamr = New StreamReader(c.stream)
    31. c.streamw = New StreamWriter(c.stream)
    32. c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
    33. list.Add(c) ' und fügen sie der liste der clients hinzu.
    34. Console.WriteLine(c.nick & " ist dem Chat beigetreten.")
    35. SendToAllClients(c.nick & " ist dem Chat beigetreten.")
    36. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
    37. Dim t As New Threading.Thread(AddressOf ListenToConnection)
    38. t.Start(c)
    39. End While
    40. End Sub
    41. Private Sub ListenToConnection(ByVal con As Connection)
    42. Do Try Dim tmp As String = con.streamr.ReadLine
    43. ' warten, bis etwas empfangen wird...
    44. Console.WriteLine(con.nick & ": " & tmp)
    45. If tmp = "/kick" & con.nick Then
    46. MsgBox("Gekickt")
    47. End If
    48. SendToAllClients(con.nick & ": " & tmp) ' an alle clients weitersenden.
    49. Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
    50. list.Remove(con)
    51. Console.WriteLine(con.nick & " hat den Chat verlassen.")
    52. SendToAllClients(con.nick & " hat den Chat verlassen.")
    53. Exit Do
    54. End Try
    55. Loop
    56. End Sub
    57. End Module



    doch wie kann ich jetzt den nick von der liste entfernen?

    ThuCommix schrieb:

    Die Liste der Connections durchlaufen, und wenn eine Davon den Nick "blah" hat, den Network Stream schließen.

    VB.NET-Quellcode

    1. Private Structure Connection
    2. Dim stream As NetworkStream
    3. Dim streamw As StreamWriter
    4. Dim streamr As StreamReader
    5. Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
    6. End Structure


    Dim strUser = tmp.Replace("/kick ","")

    Jetzt einfach mit einer For Schleife die List(Of Connection) durchlaufen, und die Nicks abgleichen, wenn ja -> NetworkStream Schließen