Получение дублирующихся данных от GPS трекера по TCPC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Получение дублирующихся данных от GPS трекера по TCP

Сообщение Anonymous »

Я использовал этот пример кода GitHub для получения данных от GPS-трекера Teltonika FMB920. Согласно документам Teltonika (документация кодека), для получения данных от GPS-трекера Teltonika по протоколу TCP трекер отправляет свой IMEI на сервер, а затем сервер отправляет обратно один байт 0x01 (Принять) или 0x00 (Отклонить) в качестве ответ. затем GPS-трекер отправляет пакеты данных GPS на сервер, и сервер должен отправить обратно количество полученных пакетов в качестве ответа. в противном случае GPS-трекер пытается отправлять повторяющиеся пакеты данных снова и снова, пока сервер не отправит количество данных в качестве ответа.
Образец работает с точки зрения получения и принятия IMEI, но всегда получает повторяющиеся пакеты данных GPS. Удивительно, но если я переключу точку останова в строке this.ResponseReverse(avlData.NumberOfData1,stream);, а затем удалю точку останова, чтобы продолжить процесс, GPS-трекер правильно отправит новые пакеты данных.
private void ClientHandler(object client)
{
var tcpClient = (TcpClient)client;
//tcpClient.NoDelay = true;

var stream = tcpClient.GetStream();

var imei = this.ReadImei(stream);

var commArgs = this.OnDeviceCnnected(imei);
if (commArgs.CommunicationAccepted)
{
this.Accept(stream);

this.OnStatusChanged(imei, AvlTcpStatus.Accepted);
}
else
{
this.Reject(stream);
this.OnStatusChanged(imei, AvlTcpStatus.Rejected);
}

while (true)
{
try
{
var memoryStream = this.ReadData(stream);
if (memoryStream.Length == 0)
{
this.OnStatusChanged(imei, AvlTcpStatus.Terminated);
break;
}

var packet = PacketParser.Parse(memoryStream);
if (memoryStream.Position != memoryStream.Length)
throw new InvalidDataException("unfinished avl packet");

var avlData = packet.GetAvlDataArray();
this.OnDataFetched(imei, avlData);
//Thread.Sleep(1000);
this.ResponseReverse(avlData.NumberOfData1, stream);
//Thread.Sleep(1000);

}
catch (Exception exception)
{
this.OnErrorOccured(imei, exception);
}
}
}

Я пытался использовать Thread.Sleep(); до и после этой строки, чтобы имитировать, какие точки останова работают, но не работают. Что вы думаете об этой проблеме?
ОБНОВЛЕНИЕ:
Подробнее о методах:
private void Accept(NetworkStream stream)
{
// 1 as byte array response will determine if it would accept data from this module.
this.Response(1, stream);
}

private void Reject(NetworkStream stream)
{
// 0 as byte array response will determine if it would reject data from this module.
this.Response(0, stream);
}

private void Response(int count, NetworkStream stream)
{
var answer = BitConverter.GetBytes(count).ToArray();
stream.Write(answer, 0, answer.Length);
}

private void ResponseReverse(int count, NetworkStream stream)
{
var answer = BitConverter.GetBytes(count).Reverse().ToArray();
stream.Write(answer, 0, answer.Length);
}

private string ReadImei(NetworkStream stream)
{
var buffer = new byte[128]; //IMEI buffer
var length = stream.Read(buffer, 0, buffer.Length);

if (buffer[0] != 0 || buffer[1] != 0x0f) throw new InvalidDataException("Wrong IMEI");
var imei = Encoding.ASCII.GetString(buffer, 2, length - 2);
return imei;
}

private MemoryStream ReadData(NetworkStream stream)
{
var buffer = new byte[4096];

var memoryStream = new MemoryStream();

while (true)
{
var length = stream.Read(buffer, 0, buffer.Length);
if (length == 0) break;
memoryStream.Write(buffer, 0, length);
if (!stream.DataAvailable) break;
}

memoryStream.Position = 0;
return memoryStream;
}


Подробнее здесь: https://stackoverflow.com/questions/783 ... ker-on-tcp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Не получаются данные GPS от устройства GPS-трекера PT06.
    Anonymous » » в форуме Python
    0 Ответы
    34 Просмотры
    Последнее сообщение Anonymous
  • Как декодировать шестнадцатеричные значения GPS-трекера с помощью PHP (протокол GT06)
    Anonymous » » в форуме Php
    0 Ответы
    24 Просмотры
    Последнее сообщение Anonymous
  • Python GPS Модуль: чтение последних данных GPS
    Anonymous » » в форуме Python
    0 Ответы
    7 Просмотры
    Последнее сообщение Anonymous
  • Проверка через записи и слияние дублирующихся записей [дублировать]
    Anonymous » » в форуме Php
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Проверка через записи и слияние дублирующихся записей [дублировать]
    Anonymous » » в форуме MySql
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»