Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 23.12.2009, 18:48
FAYSTER FAYSTER вне форума
Прохожий
 
Регистрация: 23.12.2009
Сообщения: 3
Репутация: 10
По умолчанию UDP парсинг

Чесной народ подскажите как можно в Делфях пропарсить UDP пакет, так чтобы информация что внем была читаемая. Вот его структура

Поле Длина, байт Описание
FLAG 1 Флаг начала пакета, FLAG=0x40
PROTOCOL 1 Идентификатор протокола, схема шифрования
ADDRESS 2 Младшая часть адреса источника пакета
LENGTH 2 Длина поля CDATA
CRC16 2 Контрольная сумма поля CDATA
CDATA переменная Данные/команды (определяется PID)
Ответить с цитированием
  #2  
Старый 23.12.2009, 18:54
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

А ты как его получаешь?
Вообще - пишется струтура, делается на нее указатель, потом этот указатель "накладывается" на область памяти с данными.

Код:
type
  TUDPPacket = record
    FLAG : Byte;
    PROTOCOL : Byte;
    ADDRESS : Word;
    LENGTH : Word;
    CRC16 : Word;
    CDATA : Array [] Of Byte;
  end;
  PUDPPacket = ^TUDPPacket;

...
var
  Packet : Pointer;
  UDPPacket : PUDPPacket;
begin
  Packet := GetPacket(); // типа получили данные

  UDPPacket := PUDPPacket(Packet);
  ShowMessage('Protocol : ' + IntToStr(UDPPacket^.PROTOCOL));
end;

PS. не уверен с полем CDATA. Надо смотреть подробнее.
Ответить с цитированием
  #3  
Старый 24.12.2009, 09:59
FAYSTER FAYSTER вне форума
Прохожий
 
Регистрация: 23.12.2009
Сообщения: 3
Репутация: 10
По умолчанию

Эт все хорошо, но где находиться GetPacket(), а то чтот немогу найти.
Ответить с цитированием
  #4  
Старый 24.12.2009, 11:03
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,723
Репутация: 52347
По умолчанию

Так вам-же задали вопрос, как вы эти данные получаете. За неимением ответа была предложена абстрактная функция которую вы сами должны наваять.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #5  
Старый 24.12.2009, 13:14
FAYSTER FAYSTER вне форума
Прохожий
 
Регистрация: 23.12.2009
Сообщения: 3
Репутация: 10
Сообщение

Получаю пакет с помощью
Код:
//===================================
procedure TForm1.IdUDPServer1UDPRead(Sender: TObject; AData: TStream;
  ABinding: TIdSocketHandle);
var
  DataStringStream: TStringStream;
  s: STRING;
  i:integer;
begin
DataStringStream:=TStringStream.Create('');
    try
       DataStringStream.CopyFrom(AData, AData.Size);
        for i:=0 to Adata.Size do
          begin
              s:=DataStringStream.DataString;
              Memo1.Lines.Add(s[i]);
          end;
    finally
      DataStringStream.Free;
    end;
        StatusBar1.Panels.Items[0].Text:='Отправитель IP: ' + ABinding.PeerIP;
        StatusBar1.Panels.Items[1].Text:='Получатель IP: ' + ABinding.IP;
        Memo1.Lines.SaveToFile('d.log');
end;
//===============================================

lmikle: ползуемся тегами!!!
Ответить с цитированием
  #6  
Старый 24.12.2009, 16:05
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Возьми не TStringStream, а TMemoryStream. Там можно получить указатель на память типа Pointer - именно то, что нужно для моего кода.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 23:14.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025