
- •Информационные сети
- •1.2 Стек tcp/ip
- •1.3 Соединение «клиент-сервер»
- •1.4 Протокол авр (протокол с нумерацией по модулю 2)
- •1. Функции локального управления
- •1.1 Создание socket'а
- •1.2. Связывание socket'а
- •2. Функции установления связи
- •2.1. Ожидание установления связи
- •2.2. Запрос на установление соединения
- •2.3. Прием запроса на установление связи
- •2.4. Формирование адреса узла сети
- •3. Функции обмена данными
- •3.1. Посылка данных
- •3.2. Получение данных
- •4. Функции закрытия связи
- •4.1. Системный вызов close
- •4.2. Сброс буферизованных данных
- •5.1. Программа-сервер
- •5.2. Программа-клиент
1.3 Соединение «клиент-сервер»
«Клиент» запрашивает разрешение на установление соединение, например, при помощи функции (метода) connect библиотеки (класса) Winsocket. «Сервер», в свою очередь, разрешает установление соединения при помощи функции (метода) accept (рисунок 4). Сервер может устанавливать соединения со многими клиентами (рисунок 5). Подробнее об использовании функций библиотеки Winsocket (или методов класса Winsocket) см. в Приложении. Там же содержатся примеры программ на Delphi.
Рисунок 4. Соединение точка-точка
Рисунок 5.Соединение точка-много точек
1.4 Протокол авр (протокол с нумерацией по модулю 2)
Данный протокол является протоколом прикладного уровня и в данной работе использует интерфейс нижележащих уровней (socket).
Описание этого протокола показано на рисунке 4.
N – получение нового сообщения, T – сигнал окончания периода ожидания (тайм-аут), U – обработка полученного сообщения, Di – прием i-го сообщения, Di – передача i-го сообщения, Ai – прием подтверждения о получении i-го сообщения, Ai – передача подтверждения о приходе i-го сообщения, E – прием искаженного сообщения i={0,1}, N, U – внутренние сигналы, не вызывают появление новых сигналов.
Рисунок 4 – Протокол ABP
1.5. Задание к лабораторной работе
1) Отладить программу для установления соединения и передачи тестовой строки символов от клиента к серверу
2) Отладить программу для реализации протокола ABP. Формат данных и подтверждений – произвольный.
1.7. Требования к отчету
Отчет по лабораторной работе должен содержать листинг разработанной программы с комментариями на русском языке.
ПРИЛОЖЕНИЕ
Работа с WinSocket (в Visual C++
Socket (гнездо, разъем) - абстрактное программное понятие, используемое для обозначения в прикладной программе конечной точки канала связи с коммуникационной средой, образованной вычислительной сетью. При использовании протоколов TCP/IP можно говорить, что socket является средством подключения прикладной программы к порту (см. выше) локального узла сети.
Socket-интерфейс представляет собой просто набор системных вызовов и/или библиотечных функций языка программирования СИ, разделенных на четыре группы:
Ниже рассматривается подмножество функций socket-интерфейса, достаточное для написания сетевых приложений, реализующих модель "клиент-сервер" в режиме с установлением соединения.
1. Функции локального управления
Функции локального управления используются, главным образом, для выполнения подготовительных действий, необходимых для организации взаимодействия двух программ-партнеров. Функции носят такое название, поскольку их выполнение носит локальный для программы характер.
1.1 Создание socket'а
Создание socket'а осуществляется следующим системным вызовом #include <sys/socket.h> int socket (domain, type, protocol) int domain; int type; int protocol;
Аргумент domain задает используемый для взаимодействия набор протоколов (вид коммуникационной области), для стека протоколов TCP/IP он должен иметь символьное значение AF_INET (определено в sys/socket.h).
Аргумент type задает режим взаимодействия:
SOCK_STREAM - с установлением соединения;
SOCK_DGRAM - без установления соединения.
Аргумент protocolзадает конкретный протокол транспортного уровня (из нескольких возможных в стеке протоколов). Если этот аргумент задан равным 0, то будет использован протокол "по умолчанию" (TCP для SOCK_STREAM и UDP для SOCK_DGRAM при использовании комплекта протоколов TCP/IP).
При удачном завершении своей работы данная функция возвращает дескриптор socket'а - целое неотрицательное число, однозначно его идентифицирующее. Дескриптор socket'а аналогичен дескриптору файла ОС UNIX.
При обнаружении ошибки в ходе своей работы функция возвращает число "-1".