I'm trying to recreate a SpeedoMeter in unity where the RPM data is getting sent from a python Script. I used sockets to send the data to my unity app instead of request as for some reason, I keep getting an 'Invalid host - 404' Error. The data is being received by Unity but the GUI is not updating. I've declared the Image in the inspector but it still didn't update. using UnityEngine; using UnityEngine.UI; using System.Net; using System.Text; using System.Threading; using System.Net.Sockets; public class Speedometer : MonoBehaviour { Thread thread; public int connectionPort = 25001; TcpListener server; TcpClient client; bool running; public Image SpeedoMeter_Needle; float currentSpeed = 0.0f; volatile float targetSpeed = 0; float needleSpeed = 100.0f; void Start() { if (SpeedoMeter_Needle == null) { Debug.LogError("Speedometer Needle Image is not assigned!"); return; } thread = new Thread(GetData); thread.Start(); } void GetData() { server = new TcpListener(IPAddress.Any, connectionPort); server.Start(); running = true; while (running) { client = server.AcceptTcpClient(); NetworkStream nwStream = client.GetStream(); byte[] buffer = new byte[client.ReceiveBufferSize]; while (client.Connected) { int bytesRead = nwStream.Read(buffer, 0, client.ReceiveBufferSize); if (bytesRead > 0) { string dataReceived = Encoding.UTF8.GetString(buffer, 0, bytesRead); float parsedValue = ParseData(dataReceived); UnityMainThreadDispatcher.Instance().Enqueue(() => targetSpeed = parsedValue); nwStream.Write(buffer, 0, bytesRead); } } client.Close(); } server.Stop(); } private static float ParseData(string dataString) { Debug.Log(dataString); if (dataString.StartsWith("(") && dataString.EndsWith(")")) { dataString = dataString.Substring(1, dataString.Length - 2); } return float.Parse(dataString); } void Update() { if (targetSpeed != currentSpeed) { UpdateSpeed(); } } void UpdateSpeed() { if (targetSpeed > currentSpeed) { currentSpeed += Time.deltaTime * needleSpeed; currentSpeed = Mathf.Clamp(currentSpeed, 0.0f, targetSpeed); } else if (targetSpeed < currentSpeed) { currentSpeed -= Time.deltaTime * needleSpeed; currentSpeed = Mathf.Clamp(currentSpeed, targetSpeed, 200.0f); } SetNeedle(); } void SetNeedle() { float rotationAngle = (currentSpeed / 200.0f * 240.0f - 120.0f) * -1.0f; SpeedoMeter_Needle.rectTransform.localRotation = Quaternion.Euler(0, 0, rotationAngle); } } import socket import keyboard import time host, port = "127.0.0.1", 25001 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) sock.connect((host, port)) def key_test(): rpm_init = 0.0 try: while True: if keyboard.is_pressed('q'): rpm_init += 0.1 rpm_init = min(rpm_init, 140) # Cap at 140 else: rpm_init -= 0.005 rpm_init = max(rpm_init, 0) # Prevent going below 0 message = str(rpm_init).encode("utf-8") sock.sendall(message) response = sock.recv(1024).decode("utf-8") print(response) time.sleep(0.05) except KeyboardInterrupt: print("Closing connection.") sock.close() key_test() I want it to update my GUI according to the data sent from the python script. Any help is appreciated. Continue reading...