Guten Tag,
Ich habe ein Chat Porgramm erstellt und dieses funktioniert auch, jedoch hängt sich der Server beim verlassen des Clients auf!
Dieser Fehler erscheint dann:
Das ist der Client Code :
Und dies ist der Server Code :
Ich hoffe mir kann jemand helfen, denn ich weiß absolut nicht wie ich dies beheben kann.
Ich habe ein Chat Porgramm erstellt und dieses funktioniert auch, jedoch hängt sich der Server beim verlassen des Clients auf!
Dieser Fehler erscheint dann:
Das ist der Client Code :
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.Text
- Public Class Form1
- Dim clientSocket As New System.Net.Sockets.TcpClient()
- Dim serverStream As NetworkStream
- Dim readData As String
- Dim infiniteCounter As Integer
- Private Sub Button1_Click(ByVal sender As System.Object, _
- ByVal e As System.EventArgs) Handles Button1.Click
- Dim outStream As Byte() = _
- System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + "$")
- serverStream.Write(outStream, 0, outStream.Length)
- serverStream.Flush()
- TextBox2.Text = ""
- End Sub
- Private Sub msg()
- If Me.InvokeRequired Then
- Me.Invoke(New MethodInvoker(AddressOf msg))
- Else
- TextBox1.Text = TextBox1.Text + Environment.NewLine + " >> " + readData
- End If
- End Sub
- Private Sub Button2_Click(ByVal sender As System.Object, _
- ByVal e As System.EventArgs)
- Me.Visible = False
- End Sub
- Private Sub getMessage()
- For infiniteCounter = 1 To 2
- infiniteCounter = 1
- serverStream = clientSocket.GetStream()
- Dim buffSize As Integer
- Dim inStream(10024) As Byte
- buffSize = clientSocket.ReceiveBufferSize
- serverStream.Read(inStream, 0, buffSize)
- Dim returndata As String = _
- System.Text.Encoding.ASCII.GetString(inStream)
- readData = "" + returndata
- msg()
- Next
- End Sub
- Private Sub Form1_Enter(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Enter
- End Sub
- Private Sub Form1_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles Me.KeyPress
- End Sub
- Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
- ControlBox = False
- textbox516.Text = Form2.textbox515.Text
- readData = "Mit Server verbunden."
- msg()
- clientSocket.Connect("192.168.192.40", 22045)
- 'Label1.Text = "Client Socket Program - Server Connected ..."
- serverStream = clientSocket.GetStream()
- Dim outStream As Byte() = _
- System.Text.Encoding.ASCII.GetBytes(textbox516.Text + "$")
- serverStream.Write(outStream, 0, outStream.Length)
- serverStream.Flush()
- Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf getMessage)
- ctThread.Start()
- End Sub
- Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
- Me.Close()
- End Sub
- Private Sub TextBox3_TextChanged(ByVal sender As System.Object, ByVal e As System.EventArgs)
- End Sub
- End Class
Und dies ist der Server Code :
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.Text
- Module Servermodul
- Dim clientsList As New Hashtable
- Sub Main()
- Dim serverSocket As New TcpListener(22045)
- Dim clientSocket As TcpClient
- Dim infiniteCounter As Integer
- Dim counter As Integer
- serverSocket.Start()
- msg("#########################################")
- msg("# Server gestartet. Willkommen #")
- msg("# Chatroom ist jetzt geoeffnet #")
- msg("#########################################")
- counter = 0
- infiniteCounter = 0
- For infiniteCounter = 1 To 2
- infiniteCounter = 1
- 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 + " hat den Chat betreten! ", dataFromClient, False)
- msg(dataFromClient + " hat den Chat betreten! ")
- Dim client As New handleClinet
- client.startClient(clientSocket, dataFromClient, clientsList)
- Next
- clientSocket.Close()
- serverSocket.Stop()
- msg("exit")
- Console.ReadLine()
- End Sub
- Sub msg(ByVal mesg As String)
- mesg.Trim()
- Console.WriteLine(" Console: " + mesg)
- End Sub
- Private Sub broadcast(ByVal msg As String, _
- ByVal uName As String, ByVal flag As Boolean)
- 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
- 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)
- Me.clientSocket = inClientSocket
- Me.clNo = clineNo
- Me.clientsList = cList
- Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
- ctThread.Start()
- 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
- For infiniteCounter = 1 To 2
- infiniteCounter = 1
- 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.ToString)
- End Try
- Next
- End Sub
- End Class
- End Module
Ich hoffe mir kann jemand helfen, denn ich weiß absolut nicht wie ich dies beheben kann.