Hallo Leute,
Ich habe vor geraumer Zeit mit TCP Angefangen.
Soweit sogut, nun habe ich ein Programm von mit auf TCP umgebaut das auch läuft.
Jedoch bekomme ich alle X Stunden/Tage eine StackOwerflow Exception.
Woran kann das liegen ??
Der Code des Servers:
Spoiler anzeigen
Die Fehlermeldung ist im Anhang
Hoffe ihr könnt mir auf die Sprünge helfen
Ich habe vor geraumer Zeit mit TCP Angefangen.
Soweit sogut, nun habe ich ein Programm von mit auf TCP umgebaut das auch läuft.
Jedoch bekomme ich alle X Stunden/Tage eine StackOwerflow Exception.
Woran kann das liegen ??
Der Code des Servers:
VB.NET-Quellcode
- Imports System.Net, System.IO, System.Net.Sockets, System.Text
- Module Module1
- Private cli As New TcpClient
- Private srv As TcpListener
- Private ip As IPEndPoint = New IPEndPoint(IPAddress.Any, 8000)
- Private list_leit As New List(Of Verb)
- Private list_dme As New List(Of Verb)
- Private list_fms As New List(Of Verb)
- Private einsatz As Integer
- Dim p As String
- Private Structure Verb
- Dim stream As NetworkStream
- Dim kennung As String
- Dim streamr As StreamReader
- Dim streamw As StreamWriter
- End Structure
- Sub Main()
- p = "config.ini"
- srv = New TcpListener(ip)
- srv.Start()
- Console.WriteLine("Server ist gestartet...")
- If File.Exists(p) Then einsatz = CInt(IO.File.ReadAllText(p)) Else einsatz = 1
- Dim a As String = CStr(einsatz)
- Console.WriteLine("Einsatznummer: " & a)
- Dim s As New Threading.Thread(AddressOf speichern)
- s.IsBackground = True
- s.Start()
- While True
- cli = srv.AcceptTcpClient
- Dim con As New Verb
- con.stream = cli.GetStream
- con.streamr = New StreamReader(con.stream)
- con.streamw = New StreamWriter(con.stream)
- con.kennung = con.streamr.ReadLine
- If con.kennung = "leit" Then
- Console.WriteLine("Leitstelle hat sich verbunden")
- list_leit.Add(con)
- con.streamw.WriteLine("Einsatz:" & CStr(einsatz))
- con.streamw.Flush()
- verbunden()
- Dim t As New System.Threading.Thread(AddressOf listen_leit)
- t.Start(con)
- End If
- If con.kennung = "dme" Then
- Console.WriteLine("DME hat sich verbunden")
- list_dme.Add(con)
- verbunden()
- Dim t As New System.Threading.Thread(AddressOf listen_dme)
- t.Start(con)
- End If
- If con.kennung = "FMS" Then
- Console.WriteLine("FMS hat sich verbunden")
- list_fms.Add(con)
- verbunden()
- Dim t As New Threading.Thread(AddressOf listen_fms)
- t.Start(con)
- End If
- End While
- End Sub
- Private Sub verbunden()
- Dim leit As Integer = list_leit.Count
- Dim dme As Integer = list_dme.Count
- Dim fms As Integer = list_fms.Count
- Console.WriteLine("------------------------------------------------")
- Console.WriteLine("Online Leistelle: {0}", leit)
- Console.WriteLine("Online DME: {0}", dme)
- Console.WriteLine("Online FMS: {0}", fms)
- Console.WriteLine("Aktuelle Einsatznummer: {0}", einsatz)
- Console.WriteLine("------------------------------------------------")
- End Sub
- Private Sub speichern()
- Dim e As String = CStr(einsatz)
- IO.File.WriteAllText(p, e)
- Threading.Thread.Sleep(2500)
- speichern()
- End Sub
- Private Sub listen_leit(ByVal con As Object)
- Dim c As Verb = CType(con, Verb)
- Do
- Try
- Dim tmp As String = c.streamr.ReadLine
- If tmp.StartsWith("#Einsatz") Then
- senden(tmp.Replace("#Einsatz", Nothing), "leit")
- einsatz = einsatz + 1
- c.streamw.WriteLine("Einsatz:" & CStr(einsatz))
- c.streamw.Flush()
- Console.WriteLine("Einsatz wurde gesendet...")
- Console.WriteLine("Aktuelle Einsatznummer: {0}", einsatz)
- End If
- Catch ex As Exception
- list_leit.Remove(c)
- Console.WriteLine("Leistelle hat die Verbindungen geschlossen")
- verbunden()
- Exit Do
- End Try
- Loop
- End Sub
- Private Sub listen_dme(ByVal con As Object)
- Dim c As Verb = CType(con, Verb)
- Do
- Try
- Dim tmp As String = c.streamr.ReadLine
- Catch ex As Exception
- list_dme.Remove(c)
- Console.WriteLine("DME hat die Verbindungen geschlossen")
- verbunden()
- Exit Do
- End Try
- Loop
- End Sub
- Private Sub listen_fms(ByVal con As Object)
- Dim c As Verb = CType(con, Verb)
- Do
- Try
- Dim tmp As String = c.streamr.ReadLine
- senden(tmp, "fms")
- Catch ex As Exception
- list_fms.Remove(c)
- Console.WriteLine("FMS hat die Verbindung geschlossen")
- verbunden()
- Exit Do
- End Try
- Loop
- End Sub
- Private Sub senden(ByVal mes As String, ByVal ken As String)
- If ken = "leit" Then
- For Each c As Verb In list_dme
- c.streamw.WriteLine(mes)
- c.streamw.Flush()
- Next
- End If
- If ken = "fms" Then
- For Each c As Verb In list_leit
- c.streamw.WriteLine(mes)
- c.streamw.Flush()
- Next
- End If
- End Sub
- End Module
Die Fehlermeldung ist im Anhang
Hoffe ihr könnt mir auf die Sprünge helfen