Форум: "Начинающим";
Текущий архив: 2017.04.09;
Скачать: [xml.tar.bz2];
ВнизПакетная передача данных по протоколу UDP Найти похожие ветки
← →
GAZot © (2015-08-12 13:38) [0]Здравствуйте Уважаемые Мастера Delphi!
Мне предстоит написать программку по пакетной обработке переданных по сети данных (протокол UDP).
В связи с этим у меня к Вам несколько вопросов.
1.В настоящее время в Delphi есть несколько компонентов для решения данной задачи, это
и компоненты с вкладки FastNet до delphi6 и Indy и т.д. Если у кого есть опыт какие лучше использовать?
2. Как правильно записывать принятые пакеты в файл. Во всех просмотренных мною примерах в интернете, либо
передача текстового сообщения, либо файл определённого размера, с пакетами примеров не встречал.
3. Приём и запись осуществлять в одном событии или разных?
← →
NoUser © (2015-08-12 15:58) [1]> "по пакетной обработке переданных по сети данных (протокол UDP)"
Пожалуйста, расскажите своими словами, как Вы понимаете вышеприведенную фразу?
← →
GAZot © (2015-08-12 18:40) [2]UserDatagramProtocol(UDP) – протокол пользовательских дейтаграмм.
Дейтаграмма – это, своего рода, атомарный передаваемый пакет. Каждая команда посылки данных создаёт одну дейтаграмму. Каждая операция чтения данных из буфера принимающего сокета возвращает одну дейтаграмму.
Под обработкой понимается считывание передаваемых данных в переменные и далее по ним идёт построение графиков так сказать онлайн, но одновременно принимаемые данные должны писаться в файл.
← →
NoUser © (2015-08-12 20:15) [3]https://ru.wikipedia.org/wiki/UDP :
...
Таким образом, UDP предоставляет ненадёжный сервис, и датаграммы могут прийти не по порядку, дублироваться или вовсе исчезнуть без следа. UDP подразумевает, что проверка ошибок и исправление либо не нужны, либо должны исполняться в приложении.
...
- Если это Вас не пугает, тогда ответ на вопрос №1 - любой.
Ответ на вопрос №2:
- Как только у Вас в программе будет что-то, куда Вы сможете ткнуть пальцем и сказать: "вот здесь у меня уже есть байты для файла в количестве эн штук", тогда можно будет попросить функцию Write или BlockWrite записать эти байты на диск в заранее открытый для записи файл.
Ответ на вопрос №3:
- ‘В одном’, но вопрос сформулирован так, что предварительно нужно еще и услышать от Вас, что такое событие?
← →
megavoid © (2015-08-13 10:06) [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;
← →
GAZot © (2015-08-13 12:22) [5]Спасибо megavoid, а если мне надо писать не текстовый файл, а бинарный, данные приходят именно в этом виде?
А что касаемо вопроса NoUser, то уточняю.
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
//принять пакет
//считать данные в переменные
//занести точки на график
//записать данные в файл
Всё выше перечисленное выполнять именно при событии UDPRead
← →
GAZot © (2015-08-13 12:22) [6]Спасибо megavoid, а если мне надо писать не текстовый файл, а бинарный, данные приходят именно в этом виде?
А что касаемо вопроса NoUser, то уточняю.
procedure TForm1.IdUDPServer1UDPRead(AThread: TIdUDPListenerThread;
const AData: TIdBytes; ABinding: TIdSocketHandle);
//принять пакет
//считать данные в переменные
//занести точки на график
//записать данные в файл
Всё выше перечисленное выполнять именно при событии UDPRead
← →
megavoid © (2015-08-13 13:34) [7]А чем "текстовый" файл отличается от "бинарного"? :)
и тот путь, что я указал, предназначен для демонстрации, а не для реальной работы
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2017.04.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.002 c