Moin Leute,
ich habe mal wieder ein Problem. Ich arbeite im Moment an einem Multi-Tcp-Server und benutze als Grundlage das Tutorial von Kevin89. Soweit funktioniert auch alles, die Verbindung wird problemlos hergestellt. Aber ich zeige euch mal lieber direkt wie mein Projekt bis jetzt aussieht (nur die wichtigen Ausschnitte)
Vielleicht noch eine kurze Erklärung hinterher: Die Sub Connect (die übrigens beim Start des Programmes über einen Backgroundworker aufgerufen wird) startet den Server, nimmt einkommende Verbindung an, fügt sie zu "list" hinzu und fügt danach noch die Ip des Client zur Listbox1 hinzu. Dann wird ein neuer Thread gestartet der die Verbindung an ListenToConnection übergibt. Diese Sub soll den Status der Verbindung überprüfen indem er durchgehen "StillAlive" sendet. Wenn der Client geschlossen wird, schlägt der Sendevorgang fehl und die Verbindung soll in dem Catch-Block aus "list" und die angezeigte Ip aus Listbox1 entfernt werden.
Meine Gedanke dahinter war, dass der Index von der Verbindung in "list" der gleiche ist wie der Index der angezeigten Ip in Listbox1, was theoretisch auch richtig ist. Aber hier tritt dann der Fehler auf. Erst mal ist überhaupt nichts passiert, weder bei "list" noch bei Listbox1 wurde etwas entfernt. Also bin ich auf Fehlersuche gegangen und hab dazu die Sub ListenToConnection zum folgenen abgeändert:
Ich habe alles außer den Befehlen, bei denen eigentlich was passieren sollte, entfernt, sodass die Connection eigentlich direkt nachdem sie hinzugefügt wurde, wieder entfernt wird. Daraufhin wurde dann die Fehlermeldung ausgespuckt, dass der Wert bei list.IndexOf(con) = -1 sei. Dann ist es natürlich logisch warum nichts entfernt werden konnte, aber es erscheint mir völlig unlogisch wie dieser Wert -1 entsteht.
Habt ihr eventuelle Ursachen dafür? Oder hat es eine spezielle Bedeutung wenn der Index eines Items -1 ist? Wäre nett, wenn ihr mir einige Vorschläge machen könntet
Grüße,
Minilulatsch
ich habe mal wieder ein Problem. Ich arbeite im Moment an einem Multi-Tcp-Server und benutze als Grundlage das Tutorial von Kevin89. Soweit funktioniert auch alles, die Verbindung wird problemlos hergestellt. Aber ich zeige euch mal lieber direkt wie mein Projekt bis jetzt aussieht (nur die wichtigen Ausschnitte)
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.IO
- Imports System.Net
- Public Class Form1
- Dim Client As TcpClient
- Dim server As New TcpListener(IPAddress.Any, 1090)
- Dim c As New Connection
- Private list As New List(Of Connection)
- Private Structure Connection
- Dim stream As NetworkStream
- Dim streamw As StreamWriter
- Dim streamr As StreamReader
- End Structure
- Sub Connect()
- server.Start()
- Do
- Client = server.AcceptTcpClient
- c.stream = Client.GetStream
- c.streamr = New StreamReader(c.stream)
- c.streamw = New StreamWriter(c.stream)
- Dim ip = (Client.Client.RemoteEndPoint.ToString).Split("::")(0)
- list.Add(c)
- ListBox1.Items.Add(ip)
- Dim t As New Threading.Thread(AddressOf ListenToConnection)
- t.Start(c)
- Loop
- End Sub
- Private Sub ListenToConnection(ByVal con As Connection)
- con.stream = Client.GetStream
- con.streamw = New StreamWriter(con.stream)
- Do
- Try
- con.streamw.WriteLine("StillAlive")
- con.streamw.Flush()
- Catch ex As Exception
- ListBox1.Items.RemoveAt(list.IndexOf(con))
- list.Remove(con)
- Exit Do
- End Try
- Loop
- End Sub
Vielleicht noch eine kurze Erklärung hinterher: Die Sub Connect (die übrigens beim Start des Programmes über einen Backgroundworker aufgerufen wird) startet den Server, nimmt einkommende Verbindung an, fügt sie zu "list" hinzu und fügt danach noch die Ip des Client zur Listbox1 hinzu. Dann wird ein neuer Thread gestartet der die Verbindung an ListenToConnection übergibt. Diese Sub soll den Status der Verbindung überprüfen indem er durchgehen "StillAlive" sendet. Wenn der Client geschlossen wird, schlägt der Sendevorgang fehl und die Verbindung soll in dem Catch-Block aus "list" und die angezeigte Ip aus Listbox1 entfernt werden.
Meine Gedanke dahinter war, dass der Index von der Verbindung in "list" der gleiche ist wie der Index der angezeigten Ip in Listbox1, was theoretisch auch richtig ist. Aber hier tritt dann der Fehler auf. Erst mal ist überhaupt nichts passiert, weder bei "list" noch bei Listbox1 wurde etwas entfernt. Also bin ich auf Fehlersuche gegangen und hab dazu die Sub ListenToConnection zum folgenen abgeändert:
Ich habe alles außer den Befehlen, bei denen eigentlich was passieren sollte, entfernt, sodass die Connection eigentlich direkt nachdem sie hinzugefügt wurde, wieder entfernt wird. Daraufhin wurde dann die Fehlermeldung ausgespuckt, dass der Wert bei list.IndexOf(con) = -1 sei. Dann ist es natürlich logisch warum nichts entfernt werden konnte, aber es erscheint mir völlig unlogisch wie dieser Wert -1 entsteht.
Habt ihr eventuelle Ursachen dafür? Oder hat es eine spezielle Bedeutung wenn der Index eines Items -1 ist? Wäre nett, wenn ihr mir einige Vorschläge machen könntet
Grüße,
Minilulatsch