Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Пакетная передача данных по протоколу UDP [D7]


GAZot ©   (2015-08-12 13:38:00) 

Здравствуйте Уважаемые Мастера Delphi!
Мне предстоит написать программку по пакетной обработке переданных по сети данных (протокол UDP).
В связи с этим у меня к Вам несколько вопросов.
1.В настоящее время в Delphi есть несколько компонентов для решения данной задачи, это
и компоненты с вкладки FastNet до delphi6 и Indy и т.д. Если у кого есть опыт какие лучше использовать?
2. Как правильно записывать принятые пакеты в файл. Во всех просмотренных мною примерах в интернете, либо
передача текстового сообщения, либо файл определённого размера, с пакетами примеров не встречал.
3. Приём и запись осуществлять в одном событии или разных?


megavoid   (2015-08-13 13:34:00) [1]

А чем "текстовый" файл отличается от "бинарного"? :)
и тот путь, что я указал, предназначен для демонстрации, а не для реальной работы


GAZot   (2015-08-13 12:22:00) [2]

Спасибо megavoid, а если мне надо писать не текстовый файл, а бинарный, данные приходят именно в этом виде?

А что касаемо вопроса NoUser, то уточняю.

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
 const AData: TIdBytes; ABinding: TIdSocketHandle);

//принять пакет
//считать данные в переменные
//занести точки на график
//записать данные в файл

Всё выше перечисленное выполнять именно при событии UDPRead


GAZot   (2015-08-13 12:22:00) [3]

Спасибо megavoid, а если мне надо писать не текстовый файл, а бинарный, данные приходят именно в этом виде?

А что касаемо вопроса NoUser, то уточняю.

procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
 const AData: TIdBytes; ABinding: TIdSocketHandle);

//принять пакет
//считать данные в переменные
//занести точки на график
//записать данные в файл

Всё выше перечисленное выполнять именно при событии UDPRead


megavoid   (2015-08-13 10:06:00) [4]


procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
 const AData: TIdBytes; ABinding: TIdSocketHandle);
var
 packet: String;
begin
 packet := BytesToString(AData);

 with TStringList.Create do
   try
   Add(packet);
   SaveToFile('log.txt');
 finally
   Free;
 end;
end;


NoUser   (2015-08-12 20:15:00) [5]

https://ru.wikipedia.org/wiki/UDP:

...
Таким образом, UDP предоставляет ненадёжный сервис, и датаграммы могут прийти не по порядку, дублироваться или вовсе исчезнуть без следа. UDP подразумевает, что проверка ошибок и исправление либо не нужны, либо должны исполняться в приложении.
...


- Если это Вас не пугает, тогда ответ на вопрос №1 - любой.

Ответ на вопрос №2:
- Как только у Вас в программе будет что-то,  куда Вы сможете ткнуть пальцем и сказать: "вот здесь у меня уже есть байты для файла в количестве эн штук", тогда можно будет попросить функцию Write или BlockWrite записать эти байты на диск в заранее открытый для записи файл.

Ответ на вопрос №3:
- ‘В одном’, но вопрос сформулирован так, что предварительно нужно еще и услышать от Вас, что такое событие?


GAZot   (2015-08-12 18:40:00) [6]

UserDatagramProtocol(UDP) – протокол пользовательских дейтаграмм.
Дейтаграмма – это, своего рода, атомарный передаваемый пакет. Каждая команда посылки данных создаёт одну дейтаграмму. Каждая операция чтения данных из буфера принимающего сокета возвращает одну дейтаграмму.

Под обработкой понимается считывание передаваемых данных в переменные и далее по ним идёт построение графиков так сказать онлайн, но одновременно принимаемые данные должны писаться в файл.


NoUser   (2015-08-12 15:58:00) [7]

> 'по пакетной обработке переданных по сети данных (протокол UDP)'
Пожалуйста, расскажите своими словами, как Вы понимаете вышеприведенную фразу?


Наверх

Титульная страница Поиск, карта сайта Написать письмо