Hallo
Ich habe mich im Web etwas umgeschaut und habe einen Chat Server für Vb gefunden , dieser funktioniert für meine zwecke ganz gut nur ein kleiner Fehler stört mich ...
Und zwar das wenn eine Verbindung vom Client zum Server unterbrochen wird , egal wie ob nun durch das schließen des Clients oder durch Verlust der Internetverbindung beim Client der ChatServer Crasht.
Kann man das irgendwie verhindern das der Chat Server einfach weiterläuft und nur ausgibt das eine Person denn Chat verlassen hat , währe echt toll wenn man da jemand weiterhalfen kann
Hier der Code(Über jede Verbesserung bin ich dankbar ...)
Module Module1
Dim clientsList As New Hashtable
Dim counter As Integer
Sub Main()
Try
Dim serverSocket As New TcpListener(14531)
Dim clientSocket As TcpClient
Dim counter As Integer
serverSocket.Start()
msg("Started ....")
counter = 0
While (True)
counter += 1
clientSocket = serverSocket.AcceptTcpClient()
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim 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) = clientSocket
broadcast(dataFromClient + "", dataFromClient, False)
msg(dataFromClient + "")
Dim client As New handleClinet
client.startClient(clientSocket, dataFromClient, clientsList)
End While
clientSocket.Close()
serverSocket.Stop()
msg("exit")
Console.ReadLine()
Catch ex As Exception
End Try
End Sub
Sub msg(ByVal mesg As String)
Try
mesg.Trim()
Console.WriteLine(" : " + mesg)
Catch ex As Exception
End Try
End Sub
Private Sub broadcast(ByVal msg As String, _
ByVal uName As String, ByVal flag As Boolean)
Try
Dim Item As DictionaryEntry
For Each Item In clientsList
Dim broadcastSocket As TcpClient
broadcastSocket = CType(Item.Value, TcpClient)
Dim broadcastStream As NetworkStream = _
broadcastSocket.GetStream()
Dim broadcastBytes As [Byte]()
If flag = True Then
broadcastBytes = Encoding.ASCII.GetBytes(uName + ": " + msg)
Else
broadcastBytes = Encoding.ASCII.GetBytes(msg)
End If
broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
broadcastStream.Flush()
Next
Catch ex As Exception
End Try
End Sub
Public Class handleClinet
Dim clientSocket As TcpClient
Dim clNo As String
Dim clientsList As Hashtable
Public Sub startClient(ByVal inClientSocket As TcpClient, _
ByVal clineNo As String, ByVal cList As Hashtable)
Try
Me.clientSocket = inClientSocket
Me.clNo = clineNo
Me.clientsList = cList
Dim ctThread As Threading.Thread = New Threading.Thread( _
AddressOf doChat)
ctThread.Start()
Catch ex As Exception
End Try
End Sub
Private Sub doChat()
'Dim infiniteCounter As Integer
Dim requestCount As Integer
Dim bytesFrom(10024) As Byte
Dim dataFromClient As String
Dim sendBytes As [Byte]()
Dim serverResponse As String
Dim rCount As String
requestCount = 0
While (True)
Try
requestCount = requestCount + 1
Dim 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.Message)
End Try
End While
End Sub
End Class
End Module |