Einzelnen Thread schließen

  • VB.NET

    Einzelnen Thread schließen

    Hi ich habe bei diesem Code folgendes Problem.

    Wenn ein Client die Verbindung beendet wird der Thread auf der Server nicht geschlossen.

    Daher muss ich genau den richtigen Thread schliesen. Sonst bekomme ich Endlos die Fehlermeldung der der Socket nicht erreicht werden kann.

    Wie könnte ich hier nur den richtigen Thread schliesen?



    Danke

    Mfg Micha


    VB.NET-Quellcode

    1. Imports System.Net.Sockets
    2. Imports System.TextModule Module1
    3. Dim clientsList As New Hashtable
    4. Dim user(50) As String
    5. Dim liste As String = "Aktuelle User: "
    6. Dim pos As Integer
    7. Dim leaver As StringSub Main()
    8. Dim serverSocket As New TcpListener(8888)Dim clientSocket As TcpClient
    9. Dim infiniteCounter As IntegerDim counter As Integer
    10. serverSocket.Start()msg("Chat Server Started ....")
    11. counter = 0
    12. infiniteCounter = 0For infiniteCounter = 1 To 2
    13. infiniteCounter = 1
    14. counter += 1
    15. clientSocket = serverSocket.AcceptTcpClient()
    16. Dim bytesFrom(10024) As Byte
    17. Dim dataFromClient As StringDim networkStream As NetworkStream = _
    18. clientSocket.GetStream()networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
    19. dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
    20. dataFromClient = _dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
    21. clientsList(dataFromClient) = clientSocketbroadcast(dataFromClient + " Joined ", dataFromClient, False)
    22. user(counter) = dataFromClient
    23. liste = "Aktuelle User:"For i As Integer = 0 To user.GetLength(0) - 1
    24. If user(i) <> "" Then
    25. liste = liste & user(i) & ", "
    26. End If
    27. Next
    28. Console.WriteLine(liste)broadcast(liste, "", False)
    29. msg(dataFromClient + " Joined chat room ")Dim client As New handleClinet
    30. client.startClient(clientSocket, dataFromClient, clientsList)
    31. Next
    32. clientSocket.Close()
    33. serverSocket.Stop()msg("exit")
    34. Console.ReadLine()
    35. End SubSub msg(ByVal mesg As String)
    36. mesg.Trim()Console.WriteLine(" >> " + mesg)
    37. End SubPrivate Sub broadcast(ByVal msg As String, _
    38. ByVal uName As String, ByVal flag As Boolean)Dim Item As DictionaryEntry
    39. For Each Item In clientsListDim broadcastSocket As TcpClient
    40. broadcastSocket = CType(Item.Value, TcpClient)Dim broadcastStream As NetworkStream = _
    41. broadcastSocket.GetStream()Dim broadcastBytes As [Byte]()
    42. If msg.EndsWith("ist jetzt weg!") = True Thenleaver = msg.Substring(0, msg.IndexOf(" "))Console.WriteLine(leaver & " weg")
    43. pos = Array.IndexOf(user, leaver, 0)
    44. Debug.Print(user(pos))
    45. Debug.Print(leaver)
    46. Array.Clear(user, pos, 1)
    47. End If
    48. If flag = True ThenbroadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg)
    49. Else
    50. broadcastBytes = Encoding.ASCII.GetBytes(msg)
    51. End If
    52. broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
    53. broadcastStream.Flush()
    54. Next
    55. End SubPublic Class handleClinet
    56. Dim clientSocket As TcpClient
    57. Dim clNo As StringDim clientsList As Hashtable
    58. Public Sub startClient(ByVal inClientSocket As TcpClient, _ByVal clineNo As String, ByVal cList As Hashtable)
    59. Me.clientSocket = inClientSocketMe.clNo = clineNo
    60. Me.clientsList = cListDim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
    61. ctThread.Start()
    62. End SubPrivate Sub doChat()
    63. Dim infiniteCounter As Integer
    64. Dim requestCount As Integer
    65. Dim bytesFrom(10024) As Byte
    66. Dim dataFromClient As StringDim sendBytes As [Byte]()
    67. Dim serverResponse As String
    68. Dim rCount As String
    69. requestCount = 0For infiniteCounter = 1 To 2
    70. infiniteCounter = 1
    71. Try
    72. requestCount = requestCount + 1Dim networkStream As NetworkStream = _
    73. clientSocket.GetStream()networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
    74. dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
    75. dataFromClient = _dataFromClient.Substring(0, dataFromClient.IndexOf("$"))msg("From client - " + clNo + " : " + dataFromClient)
    76. rCount = Convert.ToString(requestCount)
    77. broadcast(dataFromClient, clNo, True)Catch ex As Exception
    78. MsgBox(ex.ToString)
    79. Exit For
    80. End Try
    81. NextEnd Sub
    82. End Class
    83. End Module