tcp MultiServer list(of Connections) Problem

  • VB.NET

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

    tcp MultiServer list(of Connections) Problem

    Hi,

    Habe ein kleines Problem dass ich ohne Hilfe einfach nicht lösen kann ;)
    Habe mir den Sourcecode vom tcp Multiserver hier im Forum angeschaut und für mich etwas modifieziert.
    Wollte eine Funktion einbauen, dass der Server eine "Rundnachricht" an alle User sendet, die gerade connected sind.
    Leider schaffe ich es nur, dass der Server die nachricht an den letzten Kontakt schickt der gejoined hat.
    Meine Frage: Wie schaffe ich es, dass der Server einen String an alle connections in der list sendet?

    VB.NET-Quellcode

    1. Public Class Form1
    2. Dim befehlID As Integer
    3. Dim bugfix As Boolean = False
    4. Dim c As New Connection
    5. Dim evilnick As String
    6. Dim multi As New System.Threading.Thread(AddressOf multiII)
    7. Dim Port As Integer = 1828
    8. Private server As TcpListener
    9. Private client As New TcpClient
    10. Private ipendpoint As IPEndPoint = New IPEndPoint(IPAddress.Any, Port)
    11. Private list As New List(Of Connection)
    12. Private Structure Connection
    13. Dim stream As NetworkStream
    14. Dim streamw As StreamWriter
    15. Dim streamr As StreamReader
    16. Dim nick As String
    17. End Structure


    VB.NET-Quellcode

    1. Sub multiII()
    2. While True
    3. client = server.AcceptTcpClient
    4. c.stream = client.GetStream
    5. c.streamr = New StreamReader(c.stream)
    6. c.streamw = New StreamWriter(c.stream)
    7. c.nick = c.streamr.ReadLine
    8. list.Add(c)
    9. evilnick = (c.nick)
    10. End Sub


    Und mein Sub um Strings zu senden:

    VB.NET-Quellcode

    1. Sub befehl()
    2. If bugfix = True Then
    3. Select Case befehlID
    4. Case 1
    5. c.streamw.WriteLine("nachricht")
    6. c.streamw.Flush()
    7. befehlID = 0
    8. Case 2
    9. c.streamw.WriteLine("kick")
    10. c.streamw.Flush()
    11. befehlID = 0
    12. End Select


    Wie gesagt sendet er es an den letzten User der gejoind ist (was ja klar ist) aber wie bekomme ich es hin, das "c.streamw" für alle auf "list" stehende Verbindungen gilt?
    Im übrigen ahbe ich den Originalcode so umgeschrieben dass er anstatt einer Konsolenanwendung in einer Formsanwendung steht.

    Hoffe ihr könnt mir helfen.
    MfG
    Super!
    hat wunderbar funktioniert.
    Jetzt wundere ich mich selber das ich auf so eine einfache lösung nicht gekommen bin ;)

    ist es den auch möglich die liste nach dem nick zu durchsuchen und den passenden stream zum nick zu finden, damit man Strings an einzelne user schicken kann?