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
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
- Imports System.Net.Sockets
- Imports System.TextModule Module1
- Dim clientsList As New Hashtable
- Dim user(50) As String
- Dim liste As String = "Aktuelle User: "
- Dim pos As Integer
- Dim leaver As StringSub Main()
- Dim serverSocket As New TcpListener(8888)Dim clientSocket As TcpClient
- Dim infiniteCounter As IntegerDim counter As Integer
- serverSocket.Start()msg("Chat Server Started ....")
- counter = 0
- infiniteCounter = 0For infiniteCounter = 1 To 2
- infiniteCounter = 1
- counter += 1
- clientSocket = serverSocket.AcceptTcpClient()
- Dim bytesFrom(10024) As Byte
- Dim dataFromClient As StringDim networkStream As NetworkStream = _
- clientSocket.GetStream()networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
- dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
- dataFromClient = _dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
- clientsList(dataFromClient) = clientSocketbroadcast(dataFromClient + " Joined ", dataFromClient, False)
- user(counter) = dataFromClient
- liste = "Aktuelle User:"For i As Integer = 0 To user.GetLength(0) - 1
- If user(i) <> "" Then
- liste = liste & user(i) & ", "
- End If
- Next
- Console.WriteLine(liste)broadcast(liste, "", False)
- msg(dataFromClient + " Joined chat room ")Dim client As New handleClinet
- client.startClient(clientSocket, dataFromClient, clientsList)
- Next
- clientSocket.Close()
- serverSocket.Stop()msg("exit")
- Console.ReadLine()
- End SubSub msg(ByVal mesg As String)
- mesg.Trim()Console.WriteLine(" >> " + mesg)
- End SubPrivate Sub broadcast(ByVal msg As String, _
- ByVal uName As String, ByVal flag As Boolean)Dim Item As DictionaryEntry
- For Each Item In clientsListDim broadcastSocket As TcpClient
- broadcastSocket = CType(Item.Value, TcpClient)Dim broadcastStream As NetworkStream = _
- broadcastSocket.GetStream()Dim broadcastBytes As [Byte]()
- If msg.EndsWith("ist jetzt weg!") = True Thenleaver = msg.Substring(0, msg.IndexOf(" "))Console.WriteLine(leaver & " weg")
- pos = Array.IndexOf(user, leaver, 0)
- Debug.Print(user(pos))
- Debug.Print(leaver)
- Array.Clear(user, pos, 1)
- End If
- If flag = True ThenbroadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg)
- Else
- broadcastBytes = Encoding.ASCII.GetBytes(msg)
- End If
- broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
- broadcastStream.Flush()
- Next
- End SubPublic Class handleClinet
- Dim clientSocket As TcpClient
- Dim clNo As StringDim clientsList As Hashtable
- Public Sub startClient(ByVal inClientSocket As TcpClient, _ByVal clineNo As String, ByVal cList As Hashtable)
- Me.clientSocket = inClientSocketMe.clNo = clineNo
- Me.clientsList = cListDim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
- ctThread.Start()
- End SubPrivate Sub doChat()
- Dim infiniteCounter As Integer
- Dim requestCount As Integer
- Dim bytesFrom(10024) As Byte
- Dim dataFromClient As StringDim sendBytes As [Byte]()
- Dim serverResponse As String
- Dim rCount As String
- requestCount = 0For infiniteCounter = 1 To 2
- infiniteCounter = 1
- Try
- requestCount = requestCount + 1Dim networkStream As NetworkStream = _
- clientSocket.GetStream()networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
- dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
- dataFromClient = _dataFromClient.Substring(0, dataFromClient.IndexOf("$"))msg("From client - " + clNo + " : " + dataFromClient)
- rCount = Convert.ToString(requestCount)
- broadcast(dataFromClient, clNo, True)Catch ex As Exception
- MsgBox(ex.ToString)
- Exit For
- End Try
- NextEnd Sub
- End Class
- End Module