Материал: Лабораторная работа 1 (факультативно)

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Лабораторная работа № 1 Клиент-серверное приложение для передачи сообщений с

использованием протоколов TCP и UDP

1.1. Цель работы:

Целью первой лабораторной работы является ознакомление студентов с основной структурой клиент-серверного приложения, а также со способами реализации данных приложений с помощью библиотеки Boost::Asio.

1.2. Задание на лабораторную работу:

Разработать два клиент-серверных приложения, основанных на транспортных протоколах TCP и UDP. Каждое клиент-серверное приложение должно состоять из двух самостоятельных модулей: клиентской части и серверной части.

Клиент-серверное приложение, основанное на транспортном протоколе TCP. Клиент должен инициировать соединение с сервером и отправлять ему текстовые сообщения. Сервер должен принимать сообщения клиента и выводить их на экран, а также иметь возможность отвечать на принятые сообщения.

Клиент-серверное приложение, основанное на транспортном протоколе UDP. Клиент и сервер имеют одинаковое строение, они оба должны иметь возможность отправлять сообщения друг другу и выводить их на экран.

Все приложения должны иметь простейший графический интерфейс. Для данной лабораторной работы необходимо использовать

неблокируемые (асинхронные) сокеты.

1.3. Методические указания:

1.3.1. Понятие сокет:

Сокеты (sockets) - программный высокоуровневый интерфейс, предоставляющий возможность взаимодействовать с телекоммуникационными протоколами. Сокет представляет собой некую конечную точку коммутации, с помощью которой ваше приложение может обмениваться данными по локальной сети или глобальной сети интернет. Процесс обмена данными с помощью данного интерфейса достаточно прост: приложение записывает данные, которые необходимо отправить, в сокет; отправка данных, их транспортировка осуществляется используемым стеком протоколов и сетевой аппаратурой; при поступлении данных в сокет, приложение считывает пришедшие данные.

1.3.2. Обзор сокетов

Сокеты делятся на несколько видов.

В зависимости от используемого транспортного протокола сокеты делятся на потоковые и датаграмные.

Потоковые сокеты – сокеты, использующие, в качестве протокола транспортного уровня, протокол TCP. Данные сокеты отличаются тем, что используют процедуру установления соединения, в результате которой устанавливается некий логический канал. Использование потоковых сокетов гарантирует успешную доставку данных, что обеспечивается механизмом квитирования.

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

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

В зависимости от процедуры управления сокеты делятся на синхронные и асинхронные.

Синхронные (блокируемые) – сокеты, задерживающие управление на время выполнения операции.

Асинхронные (неблокируемые) – сокеты, возвращающие управления незамедлительно, продолжая работы в фоновом режиме. В данной лабораторной работе будут рассмотрен именно этот тип сокетов.

1.4.Особенности работы с сокетами библиотеки Boost::Asio

Всобрание библиотек Boost входит библиотека Boost::Asio, которая предоставляет набор классов для работы с сетью. Библиотека Boost:Asio содержит в себе: классы для работы с сокетами(asio::ip::tcp, asio::ip::udp,

и asio::ip::icmp); классы для работы с устройствами(asio::io_service и asio::streambuf) в синхронном и асинхронном режиме; классы, имеющие дело с SSL(asio::ssl).

Boost.Asio это чисто заголовочная библиотека. Для подключения Boost::Asio к вашему проекту необходимо подключить следующие библиотеки.

Boost::System - эта библиотека предоставляет поддержку операционной системе для библиотек Boost.

OpenSSL - эта библиотека используется, если вы решите использовать SSL поддержку, предоставляемую Boost.Asio.

ВWindows системах, в зависимости от компилятора, который вы используете, может понадобиться подключение системных библиотек для работы с сокетами - ws2_32 и wsock32.

Вслучае, если вы используете Qt Creator в качестве среды разработки, то необходимо в файл qMake (name_project.pro) дописать следующие строки, изменив при этом путь к библиотекам:

LIBS += -LC:\Qt\boost\lib -llibboost_system-mgw49-mt-d-1_57 LIBS += -LC:\Qt\boost\lib -llibboost_thread-mgw49-mt-d-1_57 LIBS += -lws2_32

LIBS += -lwsock32

INCLUDEPATH +=C:\Qt\boost\include\boost-1_57\ DEPENDPATH +=C:\Qt\boost\include\boost-1_57\

Также необходимо подключить следующие заголовочные файлы:

#include "boost/asio.hpp" – библиотека Boost::Asio #include "boost/bind.hpp" – работа с привязками #include "boost/thread.hpp" – работа с потоками

1.4.1. Обзор классов для работы с сокетами

Рисунок 1.1 Диаграмма основных классов библиотеки Boost::Asio

Источник: https://studfile.net/preview/16499906/