Сокет C# получает данные и отправляет и получает снова

У меня много GPS устройств. Одно из моих устройств (как клиент) отправляет это сообщение каждые минуты по TCP » [3G*4700201934*0009*LK, 0, 1, 61]»

и мой сервер должен прочитать сообщение от GPS-устройства и ответить на устройство, я имею в виду, что мой сервер должен отправить это сообщение «[3G*4700201934*0009*LK] » для получения позиций GPS. Если я не могу отправить это сообщение, GPS-устройство не отправляет позиции GPS.

Мой код:

TcpListener listener = new TcpListener(IPAddress.Any, port);
listener.Start();

//Sonsuz döngü sayesinde AgAkimini sürekli okuyoruz
while (true)
{
    Socket client = listener.AcceptSocket();
    Console.WriteLine("Connection accepted.");

    var childSocketThread = new Thread(() =>
    {
        byte[] data = new byte[100];
        int size = client.Receive(data);
        string fromGPSMessage = string.Empty;
        for (int i = 0; i < size; i++)
            fromGPSMessage += Convert.ToChar(data[i]);
        Console.WriteLine("Recieved data: " + fromGPSMessage);
        //fromGPSMessage = [3G*4700201934*0009*LK,0,1,59]
        string serverMessageToGPS = fromGPSMessage.Substring(0, fromGPSMessage.IndexOf(",")) + "]";
        //serverMessageToGPS = [3G*4700201934*0009*LK]
        Encoding ascii = Encoding.ASCII;
        client.Send(ascii.GetBytes(serverMessageToGPS));

        data = new byte[100];
        size = client.Receive(data);
        string newMessagefromGPSMessage = string.Empty;
        for (int i = 0; i < size; i++)
            newMessagefromGPSMessage += Convert.ToChar(data[i]);
        Console.WriteLine("New Message Data: " + newMessagefromGPSMessage);

        client.Close();
    });
    childSocketThread.Start();
}

иногда нет новых данных сообщения:

Введите описание изображения здесь

Я могу отправить сообщение на устройство, но я не знаю, как получить второе сообщение от GPS-устройства.

2 ответа

  1. Похоже, вам нужно прочитать наTcpClient: MSDN документация

    Пример на этой странице показывает, как отправлять данные, а также как считывать возвращенные вам данные.

  2. Необходимо создать событие TCP OnReceive. Таким образом, когда новые данные приходят, onReceive событие выполняется, и вы можете анализировать данные.

    В коде вы написали клиент.Получите (данные), поэтому оно получит данные одиночное время. Чтобы получить все данные, необходимо реализовать событие OnReceive или можно поместить клиент.Метод Receive (data) in loop with threading.