![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Пакетная передача данных по протоколу 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)'
Пожалуйста, расскажите своими словами, как Вы понимаете вышеприведенную фразу?