Hallo,
ich erstelle momentan ein Programm, mit dem ich Telegramme (in Bytes) an einen Clienten versende, der mir automatisch 2 Telegramme zurück sendet.
Das Programm beinhaltet einen ListenThread, der solange eine Verbindung besteht, Telegramme empfangängt und diese in einem "Monitor" ausgibt.
Ich hatte die ganze Zeit Probleme damit, nach dem disconnecten zum Clienten wieder zu reconnecten. Die Lösung zu diesem Problem habe ich hier im Forum gefunden, jedoch macht der ListenThread nun Probleme.
Ich muss diesen bevor ich bevor ich die Verbindung trenne "aborten", weil ansonsten der Thread hängen bleibt nachdem ich den Stream und Clienten beende und folgende Fehlermeldung im ListenThread erhalte:
Wenn ich nun reconnecten will, nachdem der Thread abgebrochen wurde, kommt folgende Fehlermeldung im Privat Sub "Connect":
Wie kann ich das nun mit dem Thread regeln, das dieser nach einem reconnect wieder läuft?
Hier die "Codeschnipsel":
Initialisierungen nach Public Class:
ListenThread:
Connect:
Disconnect
Sollte ich etwas unverständlich ausgedrückt haben oder Details die benötigt werden fehlen, einfach bescheid geben.
Danke euch schonmal für die Hilfe!
Gruß,
luckay
ich erstelle momentan ein Programm, mit dem ich Telegramme (in Bytes) an einen Clienten versende, der mir automatisch 2 Telegramme zurück sendet.
Das Programm beinhaltet einen ListenThread, der solange eine Verbindung besteht, Telegramme empfangängt und diese in einem "Monitor" ausgibt.
Ich hatte die ganze Zeit Probleme damit, nach dem disconnecten zum Clienten wieder zu reconnecten. Die Lösung zu diesem Problem habe ich hier im Forum gefunden, jedoch macht der ListenThread nun Probleme.
Ich muss diesen bevor ich bevor ich die Verbindung trenne "aborten", weil ansonsten der Thread hängen bleibt nachdem ich den Stream und Clienten beende und folgende Fehlermeldung im ListenThread erhalte:
Fehlermeldung 1:
Eine Ausnahme (erste Chance) des Typs "System.IO.IOException" ist in System.dll aufgetreten.
Wenn ich nun reconnecten will, nachdem der Thread abgebrochen wurde, kommt folgende Fehlermeldung im Privat Sub "Connect":
Fehlermeldung 2:
Ausnahme:Ausgelöst: "Der Thread wird ausgeführt oder wurde abgebrochen. Neustart nicht möglich." (System.Threading.ThreadStateException)
System.Threading.ThreadStateException wurde ausgelöst: "Der Thread wird ausgeführt oder wurde abgebrochen. Neustart nicht möglich."
Wie kann ich das nun mit dem Thread regeln, das dieser nach einem reconnect wieder läuft?
Hier die "Codeschnipsel":
Initialisierungen nach Public Class:
ListenThread:
VB.NET-Quellcode
- Public Delegate Function refreshMonitorDel(ByVal lstnng As String)
- Public Function refreshMonitor(ByVal lstnng As String)
- Try
- Me.txtAnzeige.AppendText(DateTime.Now & " : " & "Recieved: " + lstnng + vbCrLf)
- Catch ex As Exception
- txtAnzeige.AppendText(DateTime.Now & " : " & "Failure." + vbCrLf)
- End Try
- Return Nothing
- End Function
- Sub ListenTCPIP()
- While bListenTCPIP
- Dim thrdAnswer As Integer
- Dim lLoop As Short = 0
- While lLoop < 2
- Dim strTmp As String = ""
- thrdAnswer = Stream.Read(ReceiveBytesTCPIP, 0, Client.ReceiveBufferSize) 'FEHLERMELDUNG 1
- For i = 0 To ReceiveBytesTCPIP(1) - 1
- strTmp += "." + ReceiveBytesTCPIP(i).ToString("X2")
- Next
- If Me.txtAnzeige.InvokeRequired Then
- Me.Invoke(New refreshMonitorDel(AddressOf refreshMonitor), New Object() {strTmp})
- Else
- Me.txtAnzeige.AppendText(DateTime.Now & " : " & "Recieved: " + strTmp + vbCrLf)
- End If
- lLoop += 1
- End While
- End While
- End Sub
Connect:
VB.NET-Quellcode
- Dim Client As New Net.Sockets.TcpClient
- txtAnzeige.AppendText(DateTime.Now & " : " & "Attempting To Connect..." + vbCrLf)
- Try
- Client.Connect("172.24.55.186", 10000)
- Catch ex As SystemException
- bListenTCPIP = False
- Stream.Close()
- Client.Close()
- txtAnzeige.AppendText(DateTime.Now & " : " & "Connection Fails" + vbCrLf)
- Exit Sub
- End Try
- If Client.Connected Then
- Stream = Client.GetStream()
- bListenTCPIP = True
- ListenTCPIPThread.Start() 'FEHLERMELDUNG 2
- txtAnzeige.AppendText(DateTime.Now & " : " & "Connected" + vbCrLf)
- End If
- End Sub
Disconnect
VB.NET-Quellcode
- bListenTCPIP = False
- Try
- ListenTCPIPThread.Abort()
- Catch ex As SystemException
- End Try
- Try
- Stream.Close()
- Catch ex As SystemException
- txtAnzeige.AppendText(DateTime.Now & " : " & "Closing stream failed." + vbCrLf)
- Exit Sub
- End Try
- txtAnzeige.AppendText(DateTime.Now & " : " & "Stream closed." + vbCrLf)
- Try
- Client.Close()
- Catch ex As SystemException
- txtAnzeige.AppendText(DateTime.Now & " : " & "Disconnecting failed." + vbCrLf)
- Exit Sub
- End Try
- txtAnzeige.AppendText(DateTime.Now & " : " & "Connection closed." + vbCrLf)
- End Sub
Sollte ich etwas unverständlich ausgedrückt haben oder Details die benötigt werden fehlen, einfach bescheid geben.
Danke euch schonmal für die Hilfe!
Gruß,
luckay