Hallo,
ich stelle per TCP Client eine Verbindung zum Server her. Welchen Server, und für was für einen Zweck ist denke ich unwichtig.
Also, ich muss damit rechnen das mich jede Millisekunde ein wichtiges Packet vom Server erreichen könnte, worauf ich reagieren muss. Ich habe es bisher so gelöst, das ich nen Timer hab, der auf Intervall 1 eingestellt ist, und die jeweilige Sub des TCP Moduls aufruft. Hier einmal der Code des Moduls:
Spoiler anzeigen
So, und so wirds ganze letzendlich ausgeführt:
Der Timer bringt das ganze zum laggen. Das ist mir klar. Ich weiß dass ich es mit nem Thread lösen soltle (am besten oder?), nur kenne ich mich damit nicht so wirklich aus, habe es versucht indem ich im Modul anstatt den Timer einzuschalten das gemacht habe:
Nur hat das nicht funktioniert, weil getinfo in einem eigenen thread lief und nichtmehr auf die Funktion WriteLog zugreifen kann, und auch die Packets nicht erhalten konnte.
Ich hab auch schon gegoogelt, hat mir nichts gebracht
Könntet Ihr mir irgendwie helfen?
ich stelle per TCP Client eine Verbindung zum Server her. Welchen Server, und für was für einen Zweck ist denke ich unwichtig.
Also, ich muss damit rechnen das mich jede Millisekunde ein wichtiges Packet vom Server erreichen könnte, worauf ich reagieren muss. Ich habe es bisher so gelöst, das ich nen Timer hab, der auf Intervall 1 eingestellt ist, und die jeweilige Sub des TCP Moduls aufruft. Hier einmal der Code des Moduls:
VB.NET-Quellcode
- Imports System.Net.Sockets
- Imports System.Net
- Imports System.IO
- Module client
- 'Einige Definationen hier
- Public mIP as String
- Dim Client As System.Net.Sockets.TcpClient
- Dim stream As NetworkStream
- Dim streamr As StreamReader
- Dim streamw As StreamWriter
- Dim Port As Integer = 8080
- Function client_recieve() As String
- Try
- client_recieve = streamr.ReadLine
- Catch
- End Try
- End Function
- Sub client_send(ByVal text As String)
- Try
- streamw.WriteLine(text)
- streamw.Flush()
- Catch
- End Try
- End Sub
- Sub connect()
- Try
- writelog("Connecting")
- Client = New System.Net.Sockets.TcpClient
- Client.Connect(mIP, Port)
- If Client.Connected Then
- stream = Client.GetStream
- streamw = New StreamWriter(stream)
- streamr = New StreamReader(stream)
- login()
- End If
- Catch ex As Exception
- writelog("Error Client 1: " & ex.Message)
- End Try
- End Sub
- Sub login()
- Try
- client_send("MEIN LOGIN PACKET HIER")
- Form1.tmr_account1.Enabled = True
- writelog("Connected " & Form1.name1 & " to map")
- Catch ex As Exception
- writelog("Cannot connect " & Form1.Name & " to map")
- End Try
- End Sub
- Sub writelog(ByVal text As String)
- Form1.event_log.Items.Add(text)
- Form1.event_log.SelectedIndex = Form1.event_log.Items.Count - 1
- End Sub
- Sub getinfo()
- Try
- Dim packet As String
- packet = ""
- packet = client_recieve()
- Dim split1() As String = packet.Split("|")
- If split1(0) = "0" Then
- If split1(1) = "KIK" Then
- writelog("Lost connection")
- Form1.tmr_account1.Enabled = False
- Exit Sub
- End If
- End If
- If split1(0) = "0" Then
- If split1(1) = "A" Then
- If split1(2) = "v" Then
- client_send("LAB|UPD|GET")
- End If
- End If
- End If
- If split1(1) = "LAB" Then
- If split1(2) = "UPD" Then
- client_send("RDY|MAP")
- End If
- End If
- 'Und noch viele weitere
- Catch
- End Try
- End Sub
- End Module
So, und so wirds ganze letzendlich ausgeführt:
Der Timer bringt das ganze zum laggen. Das ist mir klar. Ich weiß dass ich es mit nem Thread lösen soltle (am besten oder?), nur kenne ich mich damit nicht so wirklich aus, habe es versucht indem ich im Modul anstatt den Timer einzuschalten das gemacht habe:
Nur hat das nicht funktioniert, weil getinfo in einem eigenen thread lief und nichtmehr auf die Funktion WriteLog zugreifen kann, und auch die Packets nicht erhalten konnte.
Ich hab auch schon gegoogelt, hat mir nichts gebracht
Könntet Ihr mir irgendwie helfen?
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „vb-opo-orbita“ ()