На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
    > Лекция: "Алгоритм передачи файла по UDP IPv4 IPv6". , На примере CImage и IStream.
      Вашему вниманию предлагается алгоритм передачи файла по UDP IPv4 IPv6 (применимо и для всех остальных протоколов) без подтверждения и обратного управления на примере графического файла.

      А) В потоке передачи:
      1. В бесконечном цикле.
      а) Делаем снимок экрана/нужного окна в CImage.
      б) Записываем в IStream данные из CImage (CImage::Save).
      в) Порциями например по 50000 байт передаём данные из IStream:
      1) в цикле по количеству порций:
      1-а) формируем заголовок с командой "/video".
      2-б) считываем текущую порцию из IStream по смещению current_data_offset расчётное количество байт (размер порции передачи минус размер заголовка) (IStream::Read).
      3-в) отправляем порцию по сети.
      2) формируем заголовок с командой "/video_end" и передаём по сети.

      Б) В потоке приёма:
      1. В бесконечном цикле становимся на получение с периодом ожидания 1 секунда.
      а) При получении данных формируем в куче параметры для процедуры (синхронный приём)/ потока (асинхронный приём).
      б) Вызываем функцию/запускаем поток.
      в) В функции/потоке обрабатываем заголовок полученных данных:
      1) получена команда "/video" - блокируем работу с IStream (CSingleLock, CCriticalSection), записываем данные в IStream (IStream::Write).
      2) получена команда "/video_end" - блокируем работу с IStream (CSingleLock, CCriticalSection),записываем накопившиеся данные из IStream (IStream::Read) в CImage (CImage::Load), предварительно установив указатель IStream на начало потока IStream::Seek).


      Возможные улучшения:
      1. В заголовке можно указывать номер порции и смещение в исходном IStream.
      2. Можно добавить обратное управление с запросом нужной порции например по TCP (каналу управления) или по UDP (обратное управление без подтверждения).
      0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
      0 пользователей:


      Рейтинг@Mail.ru
      [ Script execution time: 0,0158 ]   [ 16 queries used ]   [ Generated: 26.04.24, 06:15 GMT ]