Hallo Leute,
ich versuche beim Rennspiel Forza Horizon 4 die Datenübertragung über UDP zu verwenden, um Daten außerhalb des Spiels darstellen zu können, z.B. Tacho usw.
Hier mein bisheriger Code:
Im Spiel selbst wird eine IP (die lokale 192.168.x.x) und ein Port (z.B. 9999) angegeben.
Folgende Daten werden zurückgegeben: (siehe Dateianhang)
Es gibt leider keine offiziellen Dokumentationen, wie und in welcher Struktur die Daten vom Spiel übergegeben werden.
Vielen Dank für eure Hilfe,
mit freundlichen Grüßen,
Hilfe0987
Code-Tags korrigiert ~ EaranMaleasi
ich versuche beim Rennspiel Forza Horizon 4 die Datenübertragung über UDP zu verwenden, um Daten außerhalb des Spiels darstellen zu können, z.B. Tacho usw.
Hier mein bisheriger Code:
VB.NET-Quellcode
- Imports Newtonsoft.Json
- Imports Newtonsoft.Json.Linq
- Imports System.Net.Http
- Imports System.IO
- Imports System.Net
- Imports System.Web.Script.Serialization
- Imports System.Net.Sockets
- Imports System.Text
- Public Class Form1
- Private UdpListener As UdpClient 'Diese Client horcht auf Port 12000
- 'Private UdpSender As UdpClient ' mit diesem wird gesendet
- Private ep As IPEndPoint
- Private CallBack As AsyncCallback 'CallBack für asyncrones Empfangen
- Delegate Sub DelegateWriteRtf(t As String) 'Delegate zum schreiben des empfangenen Strings
- Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
- StartListener()
- End Sub
- Sub StartListener()
- CallBack = New AsyncCallback(AddressOf receive)
- ep = New IPEndPoint(IPAddress.Any, 9999)
- UdpListener = New UdpClient(ep)
- UdpListener.BeginReceive(CallBack, "") ' startet asyncrones Empfangen
- WriteRtf("listen to port: " & ep.Port.ToString)
- End Sub
- Sub receive(ar As IAsyncResult)
- Dim res() As Byte = UdpListener.EndReceive(ar, ep)
- Dim resString = GetStringFromBytes(res) 'Encoding.ASCII.GetString(res)
- WriteRtf(resString)
- If ar.IsCompleted Then 'wenn fertig, wieder lauschen
- UdpListener.BeginReceive(CallBack, "")
- End If
- End Sub
- Sub WriteRtf(s As String)
- 'da receive in einem anderen Thread läuft, muß Invoked werden
- If RichTextBox1.InvokeRequired Then
- Dim wd As New DelegateWriteRtf(AddressOf WriteRtf)
- RichTextBox1.Invoke(wd, s)
- Else
- RichTextBox1.AppendText(s & vbNewLine)
- End If
- End Sub
- Private Shared Function GetStringFromBytes(ByVal bytes() As Byte) As String
- Dim ByteLegth = bytes.Count
- If (ByteLegth >= 3) AndAlso (bytes(0) = &HEF) AndAlso (bytes(1) = &HBB) AndAlso (bytes(2) = &HBF) Then
- Return System.Text.Encoding.UTF8.GetString(bytes)
- ElseIf (ByteLegth >= 2) AndAlso (bytes(0) = &HFE) AndAlso (bytes(1) = &HFF) Then
- Return System.Text.Encoding.BigEndianUnicode.GetString(bytes)
- ElseIf (ByteLegth >= 2) AndAlso (bytes(0) = &HFF) AndAlso (bytes(1) = &HFE) Then
- Return System.Text.Encoding.Unicode.GetString(bytes)
- ElseIf (ByteLegth >= 2) AndAlso (bytes(0) = &H0) AndAlso (bytes(1) = &H0) AndAlso (bytes(2) = &HFE) AndAlso (bytes(3) = &HFF) Then
- Return New System.Text.UTF32Encoding(True, True).GetString(bytes)
- ElseIf (ByteLegth >= 2) AndAlso (bytes(0) = &HFF) AndAlso (bytes(1) = &HFE) AndAlso (bytes(2) = &H0) AndAlso (bytes(3) = &H0) Then
- Return System.Text.Encoding.UTF32.GetString(bytes)
- Else
- 'No BOM, assume ASCII
- Return System.Text.Encoding.ASCII.GetString(bytes)
- End If
- End Function
- End Class
Im Spiel selbst wird eine IP (die lokale 192.168.x.x) und ein Port (z.B. 9999) angegeben.
Folgende Daten werden zurückgegeben: (siehe Dateianhang)
Es gibt leider keine offiziellen Dokumentationen, wie und in welcher Struktur die Daten vom Spiel übergegeben werden.
Vielen Dank für eure Hilfe,
mit freundlichen Grüßen,
Hilfe0987
Code-Tags korrigiert ~ EaranMaleasi
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()