TCP Listening for a GPS Device

Vuyiswa Maseko 351 Reputation points
2024-04-05T21:43:11.1466667+00:00

V44C and V24C new version protocol data sample.pdf

Good Day All

its been years since i posted something, am a bit stuck on Something. i bought a GPS device from china and was given a Protocol document and i have written a TCP listening and hosted it on the server. i can use TCP test tools like "Hercules" and i was also given a Trace tool so that i can trace if any commands are sent on the tracker. they also have an app called "Any tracking" that can be downloaded in Playstore. i did install it and tested the device and i see its working on functions like flash light, sound(horn) . here is my TCP listener code and when i send a commands from my TCP tool , i get a response in my TCP listener but the device does not respond to the commands and i have attached the Protocol document

using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
class TCPServer
{
    static void Main(string[] args)
    {
        TcpListener server = null;
        try
        {
            // Set the TCP IP and port
            int port = 8888;
            IPAddress localAddr = IPAddress.Any;
            // TcpListener server
            server = new TcpListener(localAddr, port);
            // Start listening for client requests
            server.Start();
            // Enter the listening loop
            while (true)
            {
                Console.WriteLine("Waiting for a connection... and Listening through Port: " + port.ToString());
                // Perform a blocking call to accept requests
                TcpClient client = server.AcceptTcpClient();
                Console.WriteLine("Connected! + : " + DateTime.Now.ToString());
                // Handle the client request asynchronously
                HandleClient(client);
            }
        }
        catch (SocketException e)
        {
            Console.WriteLine($"SocketException: {e}");
        }
        finally
        {
            // Stop listening for new clients
            server?.Stop();
        }
        Console.WriteLine("\nServer stopped.");
    }
    static async void HandleClient(TcpClient client)
    {
        try
        {
            using (NetworkStream stream = client.GetStream())
            {
                byte[] buffer = new byte[1024];
                int bytesRead;
                while ((bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length)) > 0)
                {
                    string data = Encoding.ASCII.GetString(buffer, 0, bytesRead);
                    Console.WriteLine($"[{DateTime.Now}] Received sensor data: {data}");
                    // Parse and process sensor data
                      await ProcessSensorReceivedData(data, stream);
                    // Clear the buffer after processing
                    Array.Clear(buffer, 0, buffer.Length);
                }
                // After handling the client request, wait for a new connection
                Console.WriteLine($"[{DateTime.Now}] Waiting for a connection... and Listening through Port: 8888");
            }
        }
        catch (SocketException ex)
        {
            // Handle socket exceptions
            Console.WriteLine($"[{DateTime.Now}] SocketException: {ex}");
        }
        catch (Exception ex)
        {
            // Log any other exceptions that occur during handling
            Console.WriteLine($"[{DateTime.Now}] Exception: {ex}");
        }
        finally
        {
            // Close the client connection
            client.Close();
        }
    }
  
    static async Task<string>   ProcessReceivedData(string data, NetworkStream stream)
    {
        string deviceID = ExtractDeviceID(data);
        if (data.Contains("CONFIG") && data.Contains("TY"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process CONFIG command
            //return $"[3G*{deviceID}*0008*CONFIG,1]";
        }
        else if (data.Contains("ICCID"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process ICCID command
            // string imei = data.Split(',')[2];
            // return $"[3G*{deviceID}*0016*RYIMEI,{imei}]";
        }
        else if (data.Contains("CENTER"))
        {
            // Process CENTER command
            return $"[3G*{deviceID}*0006*CENTER]";
        } 
        else if (data.Contains("SOS"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process SOS command
            //return $"[3G*{deviceID}*0003*SOS]";
        } 
        else if (data.Contains("SMSONOFF"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process SMSONOFF command
            // return $"[3G*{deviceID}*0008*SMSONOFF]";
        }
        else if (data.Contains("REMOVESMS"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process REMOVESMS command
            // return $"[3G*{deviceID}*0009*REMOVESMS]";
        }
        else if (data.Contains("LSN"))
        {
            // Process LSN command
            //return $"[3G*{deviceID}*0003*LSN]";
            string response = await SendCommand(stream, data);
            return response;
        }
        else if (data.Contains("LED"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process LED command
            //return $"[3G*{deviceID}*0003*LED]";
        }
        else if (data.Contains("VON"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process VON command
            // return $"[3G*{deviceID}*0003*VON]";
        }
        else if (data.Contains("HON"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process HON command
            //return $"[3G*{deviceID}*0003*HON]";
        }
        else if (data.Contains("00B7* AL"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process HON command
            //  return $"[3G*{deviceID}*0002*AL]";
        }
        else if (data.Contains("HON"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process HON command
            //return $"[3G*{deviceID}*0003*HON]";
        }
        else if (data.Contains("MOD"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process MOD command
            // return $"[3G*{deviceID}*0003*MOD]";
        }
        else if (data.Contains("DND"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process DND command
            //return $"[3G*{deviceID}*0003*DND]";
        }
        else if (data.Contains("BON"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process BON command
            //return $"[3G*{deviceID}*0003*BON]";
        }
        else if (data.Contains("RESET"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process RESET command
            //return $"[3G*{deviceID}*0005*RESET]";
        }
        else if (data.Contains("POWEROFF"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process POWEROFF command
            // return $"[3G*{deviceID}*0008*POWEROFF]";
        }
       
        else if (data.Contains("WALKTIME"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process WALKTIME command
            // return $"[3G*{deviceID}*0008*WALKTIME]";
        }
        else if (data.Contains("PEDO"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process PEDO command
            //return $"[3G*{deviceID}*0004*PEDO]";
        }
        else if (data.Contains("CR"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process CR command 
            //return $"[3G*{deviceID}*00E1*UD_LTE,100222,221554,V,00.000000,,00.0000000,,0.00,0.0,0.0,0,80,40,0,0,00000000,2,0,460,0,10142,225274433,4,10142,54313355,-4,4,,8c:14:b4:5e:4b:a8,-80,,d0:c7:c0:57:af:d2,-94,,60:3a:7c:34:05:c4,-104,,80:8f:1d:86:54:b5,-106,0.0]";
        }
        else if (data.Contains("UPLOAD"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process UPLOAD command
            //return $"[3G*{deviceID}*0006*UPLOAD]";
        }
        else if (data.Contains("00BF*AL_LTE,040522,025405"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process AL_LTE command (Alarm data)
            // return "0000 0000 0001 0000 0000 0000 0000 0000";
        }
        else if (data.Contains("00BF*AL_LTE,040522,025606"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process AL_LTE command (Alarm data)
            // return "0000 0000 0000 0000 1000 0000 0000 0000";
        }
        else if (data.Contains("00BF* AL_LTE,040522,025733,A,22.653534"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process AL_LTE command (Alarm data)
            // return "0000 0000 0000 0001 0000 0000 0000 0000";
        }
        else if (data.Contains("LK"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process LK command
            // return $"[3G*{deviceID}*0002*LK]";
        }
        else if (data.Contains("FIND"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process FIND command
            // Activate ring tone to find the device
            //return $"[3G*{deviceID}*0004*FIND]";
        }
        else if (data.Contains("TKQ"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process TKQ command
            // return $"[3G*{deviceID}*0003*TKQ]";
        }
        else if (data.Contains("TKQ2"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process TKQ2 command
            //return $"[3G*{deviceID}*0004*TKQ2]";
        }
        else if (data.Contains("UD_LTE"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process UD_LTE command
            //return $"[3G*{deviceID}*0005*UD_LTE]";   // no Server response on the document 
        }
        else if (data.Contains("UD"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process UD comma
            // Process UD command
            // return $"[3G*{deviceID}*0002*UD]"; // no Server response on the document 
        }
        else if (data.Contains("SG") && data.Contains("LK"))
        {
            string response = await SendCommand(stream, data);
            // Process UD command
            return response;
            //$"[SG*{deviceID}*0002*LK]"; // no Server response on the document 
        }
      
        else if (data.Contains("UD") && data.Contains(",A,") && data.Contains(",N,") && data.Contains(",E,"))
        {
            string response = await SendCommand(stream, data);
            return response;
            // Process UD command
            //return $"[]"; // no Server response on the document 
        }
        else
        {
            // Unknown command
            return $"Unknown command: {data}";
        }
    }
    static async Task ProcessSensorReceivedData(string data, NetworkStream stream)
    {
        try
        {
            Console.WriteLine($"[{DateTime.Now}] Sensor Data Received: {data}");
            string deviceID = ExtractDeviceID(data);
            if (data.Contains("CONFIG") && data.Contains("TY"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0008*CONFIG,1]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("ICCID"))
            {
                string imei = data.Split(',')[2];
               
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0016*RYIMEI,{imei}]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("CENTER"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0006*CENTER]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("SOS"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*SOS]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("SMSONOFF"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0008*SMSONOFF]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("REMOVESMS"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0009*REMOVESMS]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("LSN"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*LSN,3]");
       
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("LED"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*LED]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("VON"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*VON]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("HON"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*HON]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("00B7* AL"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0002*AL]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("HON"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*HON]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("MOD"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*MOD]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("DND"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*DND]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("BON"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*BON]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("RESET"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0005*RESET]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("POWEROFF"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0008*POWEROFF]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("WALKTIME"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0008*WALKTIME]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("PEDO"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0004*PEDO]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("CR"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*00E1*UD_LTE,100222,221554,V,00.000000,,00.0000000,,0.00,0.0,0.0,0,80,40,0,0,00000000,2,0,460,0,10142,225274433,4,10142,54313355,-4,4,,8c:14:b4:5e:4b:a8,-80,,d0:c7:c0:57:af:d2,-94,,60:3a:7c:34:05:c4,-104,,80:8f:1d:86:54:b5,-106,0.0]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("UPLOAD"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0006*UPLOAD]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("00BF*AL_LTE,040522,025405"))
            {
                var commandresponse = await SendCommand(stream, "0000 0000 0001 0000 0000 0000 0000 0000");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("00BF*AL_LTE,040522,025606"))
            {
                var commandresponse = await SendCommand(stream, "0000 0000 0000 0000 1000 0000 0000 0000");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("00BF* AL_LTE,040522,025733,A,22.653534"))
            {
                var commandresponse = await SendCommand(stream, "0000 0000 0000 0001 0000 0000 0000 0000");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("LK"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0002*LK]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("FIND"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0004*FIND]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("TKQ"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0003*TKQ]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("TKQ2"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0004*TKQ2]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("UD_LTE"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0005*UD_LTE]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("UD"))
            {
                var commandresponse = await SendCommand(stream, $"[3G*{deviceID}*0002*UD]");
                if (commandresponse != null)
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: " + commandresponse);
                }
            }
            else if (data.Contains("SG") && data.Contains("LK"))
            {
               var commandresponse  =  await SendCommand(stream, $"[SG*{deviceID}*0002*LK]");
                if (commandresponse != null) 
                {
                    Console.WriteLine($"[{DateTime.Now}] Command Sensor response: "+ commandresponse);
                }
            }
            else if (data.Contains("UD") && data.Contains(",A,") && data.Contains(",N,") && data.Contains(",E,"))
            {
                //  No Response 
            }
            Console.WriteLine($"[{DateTime.Now}] Finished Processing Sensor Data");
        }
        catch (Exception e) 
        {
            Console.WriteLine($"[{DateTime.Now}] Error in Processing Sensor Data:" + e.Message);
        }
    }
    static async Task<string> SendCommand(NetworkStream stream, string command)
    {
        Console.WriteLine($"[{DateTime.Now}]  Insde Send Command Step 1 ");
        string response =string.Empty;
        try
        {
            Console.WriteLine($"[{DateTime.Now}] " + command + " Sending  to Device Step 2...");
            // Convert the command string to bytes
            byte[] commandBytes = Encoding.ASCII.GetBytes(command);
            Console.WriteLine($"[{DateTime.Now}]  Convert the command string to bytes Step 3 ");
            // Send the command to the device asynchronously
            await stream.WriteAsync(commandBytes, 0, commandBytes.Length);
            Console.WriteLine($"[{DateTime.Now}]  Send the command to the device asynchronously Step 4 ");
            // Read the response from the device asynchronously
            byte[] responseBuffer = new byte[1024]; // Adjust buffer size as per your requirement
            int bytesRead = await stream.ReadAsync(responseBuffer, 0, responseBuffer.Length);
            Console.WriteLine($"[{DateTime.Now}]   Read the response from the device asynchronously Step 5 ");
            // Convert the response bytes to string
            response = Encoding.ASCII.GetString(responseBuffer, 0, bytesRead);
            Console.WriteLine($"[{DateTime.Now}]  Convert the response bytes to string Step 6 ");
            Console.WriteLine($"[{DateTime.Now}] " + "Successfully sent to the Device...");
            // Return the response received from the device
             
            //////////////
        }
        catch (Exception e) 
        {
            Console.WriteLine($"Error Sending to Device Step 7" + e.Message);
        }
        return response;
    }
    static string ExtractDeviceID(string data)
    {
        // Extract device ID from the data string
        int startIndex = data.IndexOf('*') + 1;
        int endIndex = data.IndexOf('*', startIndex);
        return data.Substring(startIndex, endIndex - startIndex);
    }
  
}
C#
C#
An object-oriented and type-safe programming language that has its roots in the C family of languages and includes support for component-oriented programming.
10,935 questions
{count} votes

Your answer

Answers can be marked as Accepted Answers by the question author, which helps users to know the answer solved the author's problem.