2_2_Rpz (Готовый курсовой проект 10)
Описание файла
Файл "2_2_Rpz" внутри архива находится в следующих папках: Готовый курсовой проект 10, kursa4-seti. Документ из архива "Готовый курсовой проект 10", который расположен в категории "". Всё это находится в предмете "сетевые технологии" из 6 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "сетевые технологии" в общих файлах.
Онлайн просмотр документа "2_2_Rpz"
Текст из документа "2_2_Rpz"
Московский государственный технический университет им. Н.Э.Баумана
_________________________________________________________________
Утверждаю: | |
Галкин В.А. | "__"_____________2015 г. |
Курсовая работа по дисциплине
«Сетевые технологии»
«Локальная безадаптерная сеть»
Пояснительная записка
(вид документа)
писчая бумага
(вид носителя)
14
(количество листов)
ИСПОЛНИТЕЛИ: | |
студенты группы ИУ5-XX | |
XXX XXX XXX | "___"_________2015 г. |
Москва - 2015
________________________________________________________________
Содержание
1. Введение 2
2. Требования к программе 2
3. Определение структуры программного продукта 2
4. Физический уровень 2
5. Настройка COM-порта средствами C# 5
6. Канальный уровень. 9
7. Прикладной уровень. 12
Введение
Данная программа, выполненная в рамках курсовой работы по предмету «Сетевые технологии», предназначена для организации обмена текстовыми сообщениями между соединёнными с помощью интерфейса RS232C компьютерами. Программы позволяет обмениваться компьютерам, соединенным через COM-порты, текстовыми сообщениями и делать широковещательную рассылку при наличии на компьютерах установленной программы.
Требования к программе
К программе предъявляются следующие требования. Программа должна:
-
устанавливать соединение между компьютерами и контролировать его целостность;
-
обеспечивать правильность передачи и приема данных с помощью алгоритма кодирования пакета по алгоритму Хэмминга;
-
обеспечивать функцию передачи сообщений.
-
обеспечивать функцию широковещательной отправки сообщений.
Программа должна выполняться под управлением OS Windows XP или выше. Поэтому было решено выполнить реализацию программы с помощью среды разработки MS Visual Studio 2012.
Определение структуры программного продукта
При взаимодействии компьютеров между собой выделаются несколько уровней: нижний уровень должен обеспечивать соединение компьютера со средой передачи, а верхний – обеспечить интерфейс пользователя. Программа разбивается на три уровня: физический, канальный и прикладной (см. Приложение «Структурная схема программы»).
- Физический уровень предназначен для сопряжения компьютера со средой передачи.
- Канальный уровень занимается установлением и поддержанием соединения, формированием и проверкой пакетов обмена протоколов верхних модулей.
- Прикладной уровень занимается выполнением задач программы.
Физический уровень
Функции физического уровня
Основными функциями физического уровня являются:
-
Задание параметров COM-порта.
-
Установление физического канала.
-
Разъединение физического канала.
-
Передача информации из буфера в интерфейс.
-
Прием информации и ее накопление в буфере.
Описание физического уровня.
Последовательная передача данных означает, что данные передаются по единственной линии. При этом биты байта данных передаются по очереди с использованием одного провода. Для синхронизации группе битов данных обычно предшествует специальный стартовый бит, после группы битов следуют бит проверки на четность и один или два стоповых бита. Иногда бит проверки на четность может отсутствовать.
Из рисунка видно, что исходное состояние линии последовательной передачи данных – уровень логической 1. Это состояние линии называют отмеченным – MARK. Когда начинается передача данных, уровень линии переходит в 0. Это состояние линии называют пустым – SPACE. Если линия находится в таком состоянии больше определенного времени, считается, что линия перешла в состояние разрыва связи – BREAK.
Стартовый бит START сигнализирует о начале передачи данных. Далее передаются биты данных, вначале младшие, затем старшие.
Контрольный бит формируется на основе правила, которое создается при настройке передающего и принимающего устройства. Контрольный бит может быть установлен с контролем на четность, нечетность, иметь постоянное значение 1 либо отсутствовать совсем.
Если используется бит четности P, то передается и он. Бит четности имеет такое значение, чтобы в пакете битов общее количество единиц (или нулей) было четно или нечетно, в зависимости от установки регистров порта. Этот бит служит для обнаружения ошибок, которые могут возникнуть при передаче данных из-за помех на линии. Приемное устройство заново вычисляет четность данных и сравнивает результат с принятым битом четности. Если четность не совпала, то считается, что данные переданы с ошибкой. Конечно, такой алгоритм не дает стопроцентной гарантии обнаружения ошибок. Так, если при передаче данных изменилось четное число битов, то четность сохраняется, и ошибка не будет обнаружена. Поэтому на практике применяют более сложные методы обнаружения ошибок.
В самом конце передаются один или два стоповых бита STOP, завершающих передачу байта. Затем до прихода следующего стартового бита линия снова переходит в состояние MARK.
Использование бита четности, стартовых и стоповых битов определяют формат передачи данных. Очевидно, что передатчик и приемник должны использовать один и тот же формат данных, иначе обмен будет невозможен.
Другая важная характеристика – скорость передачи данных. Она также должна быть одинаковой для передатчика и приемника.
Скорость передачи данных обычно измеряется в бодах.
Иногда используется другой термин – биты в секунду (bps). Здесь имеется в виду эффективная скорость передачи данных, без учета служебных битов.
Интерфейс RS232C описывает несимметричный интерфейс, работающий в режиме последовательного обмена двоичными данными. Интерфейс поддерживает как асинхронный, так и синхронный режимы работы.
Последовательная передача данных означает, что данные передаются по единственной линии. При этом биты байта данных передаются по очереди с использованием одного провода. Интерфейс называется несимметричным, если для всех цепей обмена интерфейса используется один общий возвратный провод – сигнальная «земля».
Интерфейс 9-ти контактный разъем.
Номер контакта | Обозначение | Назначение | Обозначение CCITT |
1 | DCD | Обнаружение несущей | 109 |
2 | RD | Принимаемые данные | 104 |
3 | TD | Отправляемые данные | 103 |
4 | DTR | Готовность терминала к работе | 108/2 |
5 | SG | Земля сигнала (схемная) | 102 |
6 | DSR | Готовность DCE | 107 |
7 | RTS | Запрос передачи | 105 |
8 | TD | Отправляемые данные | 103 |
9 | RI | Индикатор вызова | 125 |
В интерфейсе реализован биполярный потенциальный код на линиях между DTE и DCE. Напряжения сигналов в цепях обмена симметричны по отношению к уровню сигнальной «земли» и составляют не менее +3В для двоичного нуля и не более -3В для двоичной единицы.
Каждый байт данных сопровождается специальными сигналами «старт» – стартовый бит и «стоп» – стоповый бит. Сигнал «старт» имеет продолжительность в один тактовый интервал, а сигнал «стоп» может длиться один, полтора или два такта.
При синхронной передаче данных через интерфейс передаются сигналы синхронизации, без которых компьютер не может правильно интерпретировать потенциальный код, поступающий по линии RD.
Нуль-модемный интерфейс.
Обмен сигналами между адаптером компьютера и модемом (или 2-м компьютером присоединенным к исходному посредством кабеля стандарта RS-232C) строится по стандартному сценарию, в котором каждый сигнал генерируется сторонами лишь после наступления определенных условий. Такая процедура обмена информацией называется запрос/ответным режимом, или “рукопожатием” (handshaking). Большинство из приведенных в таблице сигналов как раз и нужны для аппаратной реализации “рукопожатия” между адаптером и модемом.
Обмен сигналами между сторонами интерфейса RS-232C выглядит так:
-
компьютер после включения питания выставляет сигнал DTR, который постоянно удерживается активным. Если модем включен в электросеть и исправен, он отвечает компьютеру сигналом DSR. Этот сигнал служит подтверждением того, что DTR принят, и информирует компьютер о готовности модема к приему информации;
-
если компьютер получил сигнал DSR и хочет передать данные, он выставляет сигнал RTS;
-
если модем готов принимать данные, он отвечает сигналом CTS. Он служит для компьютера подтверждением того, что RTS получен модемом и модем готов принять данные от компьютера. С этого момента адаптер может бит за битом передавать информацию по линии TD;
-
получив байт данных, модем может сбросить свой сигнал CTS, информируя компьютер о необходимости “притормозить” передачу следующего байта, например, из-за переполнения внутреннего буфера; программа компьютера, обнаружив сброс CTS, прекращает передачу данных, ожидая повторного появления CTS.
-
Когда модему необходимо передать данные в компьютер, он (модем) выставляет сигнал на разъеме 8 – DCD. Программа компьютера, принимающая данные, обнаружив этот сигнал, читает приемный регистр, в который сдвиговый регистр “собрал” биты, принятые по линии приема данных RD. Когда для связи используются только приведенные в таблице данные, компьютер не может попросить модем “повременить” с передачей следующего байта. Как следствие, существует опасность переопределения помещенного ранее в приемном регистре байта данных вновь “собранным” байтом. Поэтому при приеме информации компьютер должен очень быстро освобождать приемный регистр адаптера. В полном наборе сигналов RS-232C есть линии, которые могут аппаратно “приостановить” модем.
Нуль-модемный интерфейс характерен для прямой связи компьютеров на небольшом расстоянии (длина кабеля до 15 метров). Для нормальной работы двух непосредственно соединенных компьютеров нуль-модемный кабель должен выполнять следующие соединения:
-
RI-1 + DSR-1 — DTR-2;
-
DTR-1 — RI-2 + DSR-2;
-
CD-1 — CTS-2 + RTS-2;
-
CTS-1 + RTS-1 — CD-2;
-
RD-1 — TD-2;
-
TD-1 — RD-2;
-
SG-1 — SG-2;
Знак «+» обозначает соединение соответствующих контактов на одной стороне кабеля.
Настройка COM-порта средствами C#
Пространство имен System.IO.Ports предлагает широкие возможности по настройке COM-порта.
Описание класса SerialPort
Этот класс используется для управления файловым ресурсом последовательного порта. Данный класс предоставляет возможности управления вводом-выводом в синхронном режиме или на основе событий, доступа к состоянию линии и состоянию разрыва, а также доступа к свойствам последовательного драйвера.
Методы класса:
Имя | Описание |
Close | Закрывает соединение порта, присваивает свойству IsOpen значение false и уничтожает внутренний объект Stream. |
CreateObjRef | Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject.) |
DiscardInBuffer | Удаляет данные из буфера приема последовательного драйвера. |
DiscardOutBuffer | Удаляет данные из буфера передачи последовательного драйвера. |
Dispose() | Освобождает все ресурсы, используемые объектом Component. (Унаследовано от Component.) |
Dispose(Boolean) | Освобождает неуправляемые ресурсы, используемые объектом SerialPort (при необходимости освобождает и управляемые ресурсы). (Переопределяет Component.Dispose(Boolean).) |
Equals(Object) | Определяет, равен ли заданный объект Object текущему объекту Object. (Унаследовано от Object.) |
Finalize | Освобождает неуправляемые ресурсы и выполняет другие операции очистки перед тем, как объект Component будет освобожден при сборке мусора. (Унаследовано от Component.) |
GetHashCode | Играет роль хэш-функции для определенного типа. (Унаследовано от Object.) |
GetLifetimeService | Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.) |
GetPortNames | Получает массив имен последовательных портов для текущего компьютера. |
GetService | Возвращает объект, представляющий службу, обеспечиваемую компонентом Component или его контейнером Container. (Унаследовано от Component.) |
GetType | Возвращает объект Type для текущего экземпляра. (Унаследовано от Object.) |
InitializeLifetimeService | Возвращает объект обслуживания во время существования для управления политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject.) |
MemberwiseClone | Создает неполную копию текущего объекта Object. (Унаследовано от Object.) |
MemberwiseClone(Boolean) | Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject.) |
Open | Открывает новое соединение последовательного порта. |
Read(Byte[], Int32, Int32) | Считывает из входного буфера SerialPort определенное число байтов и записывает их в байтовый массив, начиная с указанной позиции. |
Read(Char[], Int32, Int32) | Считывает из входного буфера SerialPort определенное число символов и записывает их в символьный массив, начиная с указанной позиции. |
ReadByte | Считывает из входного буфера SerialPort один байт в синхронном режиме. |
ReadChar | Считывает из входного буфера SerialPort один символ в синхронном режиме. |
ReadExisting | Считывает все непосредственно доступные байты в соответствии с кодировкой из потока и из входного буфера объекта SerialPort. |
ReadLine | Считывает данные из входного буфера до значения NewLine. |
ReadTo | Считывает из входного буфера строку до указанного значения value. |
ToString | Возвращает строку String, содержащую имя компонента Component, если таковое имеется.Этот метод не следует переопределять. (Унаследовано от Component.) |
Write(String) | Записывает указанную строку в последовательный порт. |
Write(Byte[], Int32, Int32) | Записывает указанное число байтов в последовательный порт, используя данные из буфера. |
Write(Char[], Int32, Int32) | Записывает указанное число символов в последовательный порт, используя данные из буфера. |
WriteLine | Записывает указанную строку и значение NewLine в выходной буфер. |
Свойства класса:
Имя | Описание |
BaseStream | Получает базовый объект Stream для объекта SerialPort. |
BaudRate | Получает или задает скорость передачи для последовательного порта (в бодах). |
BreakState | Получает или задает состояние сигнала разрыва. |
BytesToRead | Получает число байтов данных, находящихся в буфере приема. |
BytesToWrite | Получает число байтов данных, находящихся в буфере отправки. |
CanRaiseEvents | Возвращает значение, показывающее, может ли компонент вызывать событие. (Унаследовано от Component.) |
CDHolding | Получает состояние линии обнаружения несущей для порта. |
Container | Возвращает контейнер IContainer, содержащий компонент Component. (Унаследовано от Component.) |
CtsHolding | Получает состояние линии готовности к приему. |
DataBits | Получает или задает стандартное число битов данных в байте. |
DesignMode | Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время. (Унаследовано от Component.) |
DiscardNull | Получает или задает значение, показывающее, игнорируются ли пустые байты (NULL), передаваемые между портом и буфером приема. |
DsrHolding | Получает или задает состояние сигнала готовности данных (DSR). |
DtrEnable | Получает или задает значение, включающее поддержку сигнала готовности терминала (DTR) в сеансе последовательной связи. |
Encoding | Получает или задает кодировку байтов для преобразования текста до и после передачи. |
Events | Возвращает список обработчиков событий, которые прикреплены к этому объекту Component. (Унаследовано от Component.) |
Handshake | Получает или задает протокол установления связи для передачи данных через последовательный порт. |
IsOpen | Получает значение, указывающее состояние объекта SerialPort — открыт или закрыт. |
NewLine | Получает или задает значение, используемое для интерпретации окончания вызова методов ReadLine и WriteLine. |
Parity | Получает или задает протокол контроля четности. |
ParityReplace | Получает или задает байт, которым заменяются недопустимые байты потока данных при обнаружении ошибок четности. |
PortName | Получает или задает последовательный порт, в частности, любой из доступных портов COM. |
ReadBufferSize | Получает или задает размер входного буфера SerialPort. |
ReadTimeout | Получает или задает срок ожидания в миллисекундах для завершения операции чтения. |
ReceivedBytesThreshold | Получает или задает число байтов, содержащихся во внутреннем входном буфере перед наступлением события DataReceived. |
RtsEnable | Получает или задает значение, показывающее, включен ли сигнал запроса передачи (RTS) в сеансе последовательной связи. |
Site | Получает или задает экземпляр ISite для компонента Component. (Унаследовано от Component.) |
StopBits | Получает или задает стандартное число стоповых битов в байте. |
WriteBufferSize | Получает или задает размер выходного буфера последовательного порта. |
WriteTimeout | Получает или задает срок ожидания в миллисекундах для завершения операции записи. |
События класса:
Имя | Описание |
DataReceived | Представляет метод обработки события получения данных для объекта SerialPort. |
Disposed | Происходит при удалении компонента вызовом метода Dispose. (Унаследовано от Component.) |
ErrorReceived | Представляет метод обработки события ошибки объекта SerialPort. |
PinChanged | Представляет метод для обработки события изменения последовательной линии объекта SerialPort. |
-
Описание класса CommunicationManager
Поля класса:
Имя | Описание |
Start | Стартовый бит, равный 0xFF |
CurrentUser | Текущий пользователь программы |
LinkActive | Активность соединения |
TextBox1 | Текстовый контрол, в который записывается чат |
TextBox2 | Текстовый контрол, в который записывается служебная информация |
Users | Пользователи, которым необходимо переслать сообщение |
_coder | Экземпляр класса Heming |
_messageColor | Цвет текста |
Перечисления класса:
Имя | Описание |
MessageType | Содержит типы сообщений. |
FrameType | Содержит типы кадров |
Методы класса:
Имя | Описание |
FrameAnalysis | Анализирует типы входных кадров |
WriteData | Записывает указанную строку и тип кадра в последовательный порт. |
DisplayData | Отображает данные с последовательного порта на экране |
CharToInt | Переводит символ типа char в его числовое представление |
-
Описание класса Heming
Методы класса:
Имя | Описание |
CodeString | Кодирует строку типа string при помощи алгоритма Хемминга |
DeCodeString | Декодирует набор байтов в строку типа string, основываясь на алгоритме Хемминга |
5.4 Описание класса Settings