Schleife wird ignoriert?

  • Allgemein

Es gibt 26 Antworten in diesem Thema. Der letzte Beitrag () ist von Andy16823.

    Sag mal? Ignorierst du mich?
    Was ist denn 'Nothing' oder nicht instanziiert? Schau das mal beim Debuggen nach.
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:
    @Trade Erstmal sry :D . es ist nichts 'Nothing'.

    Es geht dank diesem Code:

    VB.NET-Quellcode

    1. For Each nick As String In nicklist
    2. If nick.Equals(c.nick) = True Then
    3. subnick = c.nick.Split(":")(0).ToString()
    4. SendToAllClients("@" & c.nick.Substring(0, subnick.Length) & " /success")
    5. list.Add(c) ' und fügen sie der liste der clients hinzu.
    6. Console.WriteLine(c.nick.Substring(1, subnick.Length) & " has joined.")
    7. SendToAllClients(c.nick.Substring(1, subnick.Length) & " ist dem Chat beigetreten.")
    8. End If
    9. Next


    Dafür wie gesagt: Ein 2 User dazu, und der erste kann nichts mehr machen.
    Hast du deinen Code verändert , denn du musst in die Struktur einen TCPClient nehmen, du registrierst nur einen, aber du musst für jede verbindung einen registrieren.

    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, 8000) ' eingestellt ist port 8000. dieser muss ggf. freigegeben sein!
    8. Private list As New List(Of Connection)
    9. Public nicklist As New List(Of String)
    10. Dim subnick As String
    11. Private Structure Connection
    12. Dim stream As NetworkStream
    13. Dim streamw As StreamWriter
    14. Dim streamr As StreamReader
    15. ' Hier der Client
    16. Dim UserClient As TcpClient
    17. Dim nick As String ' natürlich optional, aber für die identifikation des clients empfehlenswert.
    18. End Structure
    19. Private Sub SendToAllClients(ByVal s As String)
    20. For Each c As Connection In list ' an alle clients weitersenden.
    21. Try
    22. c.streamw.WriteLine(s)
    23. c.streamw.Flush()
    24. Catch
    25. End Try
    26. Next
    27. End Sub
    28. Sub Main()
    29. ' Fabian
    30. nicklist.Add("radioffk:fabiankrahtz")
    31. ' END
    32. Console.WriteLine("InfoServer V 1 (c) radioffk - Status: Running")
    33. Console.WriteLine()
    34. Console.WriteLine("<==== IP ====>")
    35. Console.WriteLine(Dns.GetHostEntry(Dns.GetHostName()).AddressList.ToList().Find(Function(ip) ip.AddressFamily = System.Net.Sockets.AddressFamily.InterNetwork).ToString())
    36. Console.WriteLine("<============>")
    37. Console.WriteLine()
    38. server = New TcpListener(ipendpoint)
    39. server.Start()
    40. While True ' wir warten auf eine neue verbindung...
    41. client = server.AcceptTcpClient
    42. Dim c As New Connection ' und erstellen für die neue verbindung eine neue connection...
    43. c.stream = client.GetStream
    44. c.streamr = New StreamReader(c.stream)
    45. c.streamw = New StreamWriter(c.stream)
    46. c.nick = c.streamr.ReadLine ' falls das mit dem nick nicht gewünscht, auch diese zeile entfernen.
    47. For i As Integer = 0 To nicklist.Count
    48. If nicklist(i) = c.nick Then
    49. SendToAllClients("@" & c.nick.Substring(0, subnick.Length) & " /success")
    50. End If
    51. Next
    52. subnick = c.nick.Split(":")(0).ToString()
    53. list.Add(c) ' und fügen sie der liste der clients hinzu.
    54. Console.WriteLine(c.nick.Substring(0, subnick.Length) & " has joined.")
    55. SendToAllClients(c.nick.Substring(0, subnick.Length) & " ist dem Chat beigetreten.")
    56. ' falls alle anderen das auch lesen sollen können, an alle clients weiterleiten. siehe SendToAllClients
    57. Dim t As New Threading.Thread(AddressOf ListenToConnection)
    58. t.Start(c)
    59. End While
    60. End Sub
    61. Private Sub ListenToConnection(ByVal con As Connection)
    62. Do
    63. Try
    64. Dim tmp As String = con.streamr.ReadLine ' warten, bis etwas empfangen wird...
    65. Dim bcast As String = tmp.Replace("/bcast ", "")
    66. If tmp = "/closeall" Then
    67. SendToAllClients("/close")
    68. End If
    69. If tmp.StartsWith("@") Then
    70. SendToAllClients(tmp)
    71. End If
    72. If tmp.StartsWith("/bcast") Then
    73. Console.WriteLine("[SERVER] Broadcast: " & bcast)
    74. SendToAllClients("[SERVER] Broadcast: " & bcast)
    75. ElseIf tmp = "/clsall" Then
    76. SendToAllClients("/cls")
    77. Else
    78. Console.WriteLine(con.nick.Substring(0, subnick.Length) & ": " & tmp)
    79. SendToAllClients(con.nick.Substring(0, subnick.Length) & " um " & TimeOfDay & ": " & tmp) ' an alle clients weitersenden.
    80. End If
    81. Catch ' die aktuelle überwachte verbindung hat sich wohl verabschiedet.
    82. list.Remove(con)
    83. Console.WriteLine(con.nick.Substring(0, subnick.Length) & " has left.")
    84. SendToAllClients(con.nick.Substring(0, subnick.Length) & " hat den Chat verlassen.")
    85. Exit Do
    86. End Try
    87. Loop
    88. End Sub
    89. End Module
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Also mal eine Sache zu dem Code allgemein,
    der ist denk ich mal von Kevin's Tutorial was ziemlich veraltet ist.

    Guck dir mal das hier an:

    VB.NET-Quellcode

    1. Private ipEndPoint As New IPEndPoint(IPAddress.Any, 8000)
    2. Private tcpListener As New TcpListener(ipEndPoint)
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. listener.BeginAcceptTcpClient(AddressOf Accepted, Nothing)
    5. End Sub
    6. Private allConnections As New List(Of Connection)
    7. Protected Sub Accepted(iasy As IAsyncResult)
    8. Dim newClient = New Connection(listener.EndAcceptTcpClient(iasy).GetStream)
    9. 'Hier kannst du alles mit dem neuen Clienten machen da er eigtl noch nicht auf dem Server angezeigt wird und wenn dir was nicht passt schliesst du seine Verbindung
    10. Dim name As String = String.Empty
    11. newClient.GetName(name)
    12. Do While allConnections.Where(Function(item) item.Name = name).Any
    13. newClient.Write("Name bereits vorhanden, bitte nochmal.")
    14. newClient.GetName(name)
    15. Loop
    16. newClient.Name = name
    17. allConnections.Add(newClient) 'Hier wird er nun auf dem Server angezeigt und ist "offiziel" drauf.
    18. newClient.Stream.BeginRead(newClient.Input, 0, newClient.Input.Length, AddressOf Read, newClient)
    19. listener.BeginAcceptTcpClient(AddressOf Accepted, Nothing)
    20. End Sub
    21. Protected Sub Read(iasy As IAsyncResult)
    22. Dim newClient = DirectCast(iasy.AsyncState, Connection)
    23. Try
    24. Dim length As Integer = newClient.Stream.EndRead(iasy)
    25. Dim output As String = Encoding.Default.GetString(newClient.Input, 0, length)
    26. MessageBox.Show(String.Concat(newClient.Name, ": ", output))
    27. newClient.Stream.BeginRead(newClient.Input, 0, newClient.Input.Length, AddressOf Read, newClient)
    28. Catch
    29. allConnections.Remove(newClient)
    30. For Each user In allConnections
    31. user.Write(String.Concat(newClient.Name, "-", "disconnected")) 'muss dann dementsprechend von allen Clienten verarbeitet werden
    32. Next
    33. End Try
    34. End Sub
    35. End Class
    36. Public Class Connection
    37. Public Sub New(ByVal stream As NetworkStream)
    38. Me.Stream = stream
    39. End Sub
    40. Private _input(256) As Byte
    41. Public ReadOnly Property Input() As Byte()
    42. Get
    43. Return _input
    44. End Get
    45. End Property
    46. Public Property Stream As NetworkStream
    47. Public Property Name As String
    48. Public Sub Write(ByVal text As String)
    49. Dim input As Byte() = Encoding.Default.GetBytes(text)
    50. Me.Stream.BeginWrite(input, 0, input.Length, AddressOf Me.Stream.EndWrite, Nothing)
    51. End Sub
    52. Public Sub GetName(ByRef input As String)
    53. Dim length As Integer = Me.Stream.Read(Me.Input, 0, Me.Input.Length)
    54. input = Encoding.Default.GetString(Me.Input, 0, length)
    55. End Sub
    56. End Class

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

    Schau mal meinen Beitrag oben an, du musst den Socket jedes Clienten mit Speichern, wenn du für jede verbindung einen neu aufmachst und Ihn aber nicht speicherst kannst du Ihn nich mehr verwenden.
    Meine Projekte Genesis Game Engine | GFX | smartli.me - Der smarte URL shortener

    Danke an alle. Jetzt klappt erstmal alles prima. :thumbsup:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „radio-ffk“ ()