Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Выбор языка программирования.




Курсовой проект

по дисциплине «Сети ЭВМ и телекоммуникации»

 

Разработка протокола прикладного уровня передачи трафика и прием звукового файла.

 

Проверила: Симонина Ольга Александровна

 

Санкт-Петербург

2012 год

 

Содержание:

 

Задание на курсовое проектирование………………………………………………3

Пояснительная записка……………………………………………………………...4

Структура пакета……………………………………………………………...4

Буфер и таймеры………………………………………………………………5

Алгоритм работы программы………………………………………………...5

Программная реализация……………………………………………………..6

Блок схемы…………………………………………………………………….7

Алгоритм программы на языке SDL………………………………………..18

Листинг программы…………………………………………………………20

 

Цель курсового проекта: Разработка протокола верхнего уровня согласно требованиям на курсовое проектирование

Задание на курсовое проектирование:

1. Разработать структуру протокола согласно функциям (см. табл.вариант):

1.1. Определить функции протокола и структуру пакета разрабатываемого протокола;

1.2. Описать поля заголовка разрабатываемого протокола, рассчитать необходимую длину полей заголовка;

1.3. Рассчитать необходимую длину буфера на приеме в зависимости от длины пакета и максимально допустимой задержки.

2. Разработать алгоритмы обработки данных на приеме и передаче и представить их блок-схемы.

3. Разработать программную реализацию протокола:

3.1. Описать разработанные функции, их назначение и структуру;

3.2. Описать подключаемые стандартные функции Windows;

3.3. Скомпилировать файл.exe, протестировать на реальной сети.

Вариант задания:

А Б Тип трафика Значение поля дополнительной информации Число посылаемых пакетов Длина поля данных пакета, байт Задержка воспроизведения, пак.
    Stream Символьное с именем файла      

 

Пояснительная записка

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

При продвижении пакетов данных по сети с высокой загруженностью они могут задерживаться в буферах сетевых узлов. Это часто приводит к тому, что доходят они со случайными сдвигами во времени; разброс этих значений носит название джиттера. Для трафика реального времени это представляет существенную проблему, и поэтому восстановление на приёме правильного положения данных пакета на временной оси нужно использовать специальные механизмы.

Для реализации этих механизмов в курсовом проекте необходимо учесть 2 условия:

· поле данных в пакетах имеет фиксированный размер и содержит строго определённую длительность аудиоданных,

· на приёме заранее известны оба параметра.

Выполнение первого условия требует использования голосового кодека с постоянной скоростью кодирования речевого сигнала. В программе используется кодек, реализующий импульсно-кодовую модуляцию с параметрами, принятыми в классической телефонии: частота дискретизации 8 кГц, точность отсчетов – 8 бит, число каналов – 1 (моно).

На принимающей стороне создаётся циклический буфер (джиттер-буфер), куда помещаются принимаемые аудиоданные. Через промежутки времени, равные длительности воспроизведения одной ячейки буфера, из него считывается новый блок данных и воспроизводится. Между записью блока и его отправкой на воспроизведение вносится задержка, величина которой должна обеспечивать подавление эффекта джиттера. В этом случае даже если пришедшие из сети пакеты записываются в буфер через случайные моменты времени, а воспроизводятся через равные.

Организация джиттер-буфера

 

Структура пакета

Так как для трафика реального времени в качестве протокола транспортного уровня применяется UDP, то из-за этого пакеты могут передаваться по сети от источника к получателю разными маршрутами. Это может привести к тому, что пакеты будут приходить не только со случайными сдвигами во времени, но и в неправильном порядке. Для обнаружения таких ситуаций в структуру пакета вводится поле с номером пакета. На передаче пакеты нумеруются по заданному модулю, а на приёме анализируется номер принятого пакета. Если приходит пакет с номером меньшим или равным номеру предыдущего пакета, то такой пакет отбрасывается, в противном случае - отправляется на воспроизведение. В качестве дополнительного поля для расширения функциональности протокола в данной программе в структуру пакета введено символьное имя, которое задается на передающей стороне. Таким образом структура передаваемого пакета выглядит следующим образом:

Имя файла Номер пакета Аудиоданные

Под имя файла выделяется 10 байт, еще 4 байта для переменной типа int для номера пакета, для аудиоданных согласно варианту необходимо выделить 192 байта.

При кодировании звука 8 кГц по 8 бит на один отсчет для кодирования 1 секунды необходимо 8*8000 = 64000 бит = 8000 байт или 8 Кбайт. Размер одного пакета аудиоданных 192 байта, следовательно, один пакет аудиоданных несет в себе 192/(8000*8)=0,003 с или 3 мс. Общий размер пакета составляет: 192 байта (аудиоданные)+10 байт (имя файла) + 4 байта (для № пакета) = 206 байт. Размер с учетом полей заголовка (Ethernet-заголовок 16 байт, IP – 20 байт, 8 байт UDP) составляет 250 байт. Таким образом, общий размер пакета с учетом всех заголовков 250 байт.

 

Буфер и таймеры

Для устранения джиттера на принимающей части должна быть организована очередь из некоторого количества элементов, в которой будут храниться данные между приемом и воспроизведением. По заданию буфер должен хранить 14 пакетов. Это означает, что задержка при воспроизведении будет 3*14=42 мс = 0,042 с, что для передачи файла вполне приемлемо. Суммарная задержка, вносимая пакетизацией и джиттер-буфером равна 45 мс. Таким образом, размер джиттер-буфера на принимающей стороне должен быть 192*14=2688 байт (14 ячеек, 42 мс).

Для осуществления посылки пакета в сеть, приема, воспроизведения необходимо организовать 2 таймера. Таймеры должны срабатывать через определенное количество времени. Более точно определить период необходимо экспериментально, т.к. существует небольшая погрешность, как в расчетах, так и при работе программы при относительно небольших значениях периода таймеров. Экспериментально получили период, равный 16 мс.

Алгоритм работы программы

1.При запуске программы инициализируется работа с сокетами и работа со звуком.

2.При нажатии пользователем кнопки начала отправки открывается звуковой файл для чтения и включается таймер на отправку.

3.При нажатии кнопки остановки передачи останавливается таймер передачи

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

5.При нажатии кнопки начала прием запускается таймер на прием.

6.При нажатии кнопки остановки приема этот таймер останавливается

7.При срабатывании таймера ан прием принимается пакет, из него выделяются аудиоданные и записываются в очередь воспроизведения, после чего проверяется, что таймер на воспроизведение включении, и, если это не так, происходит его включение.

8.При срабатывании таймера на воспроизведения один пакет читается из очереди воспроизведения и выводится на устройство вывода.

 

Программная реализация.

Выбор языка программирования.

При написании программы был выбран язык С++, который является в настоящее время самым распространенным, отличается универсальностью и богатыми функциональными возможностями. В качестве среды разработки был выбран пакет Borland C++ Builder 5.0.

Главное окно программы включает в себя следующие поля:

Поле From - поле ввода-редактирования строки символов ввода имени отправителя.

Поле То - поле ввода-редактирования строки символов ввода IP-адреса получателя.

Кнопка Send - командная кнопка начала трансляции звукового файла.

Кнопка Stop Send - командная кнопка остановки трансляции звукового файла.

Кнопка Receive - командная кнопка подключения к трансляции звукового файла.

Кнопка Stop Receive - командная кнопка отключения трансляции звукового файла.

 

 

Блок-схемы

Функция создания и настройки сокета

 

 

Функция приема пакетов

 

Функция формирования и передачи пакетов

 

Функция записи принятых аудиоданных в циклический буфер

Функция потока для контроля данных пришедших на сокет

Запуск программы

Нажатие кнопки «Начать передачу»

 

 

Срабатывание таймера на отправку пакетов

Нажатие кнопки «остановить прием»

 

 

Нажатие кнопки «остановить»

 

Нажатие кнопки «принимать»

 

 

Срабатывание таймера на воспроизведение принятых данных

Нажатие кнопки «прекратить»

Выход из программы

 

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...