Skip to content

Latest commit

 

History

History
119 lines (87 loc) · 6.23 KB

Readme.md

File metadata and controls

119 lines (87 loc) · 6.23 KB

Домашнее задание к занятию «TCP клиент»

Цель задания

В результате выполнения этого задания вы научитесь создавать TCP сокеты, принимать и отправлять данные, а также работать с протоколами информационного взаимодействия.


Инструкция к заданию

  1. Скачать исполняемый файл и библиотеки сервера — это необходимо для проверки и отладки.
  2. Скачать прекод клиента.
  3. Реализовать функции в клиентском приложении в соответствии с заданием.

Задание 1

Необходимо разработать функции приложения.

  1. Реализовать следующие методы:
  • TCPclient::TCPclient
  • TCPclient::SendRequest
  • TCPclient::ConnectToHost
  • TCPclient::DisconnectFromHost
  • TCPclient::ProcessingData
  • MainWindow::DisplayTime
  • MainWindow::DisplayStat
  • MainWindow::on_pb_request_clicked
  1. В приложении должны использоваться сигналы:
  • sig_sendTime
  • sig_Disconnected
  • sig_connectStatus
  • sig_sendStat
  1. Необходимо реализовать обработчик и вывод в лог следующих сообщений:
  • приёма времени от сервера,
  • вывода статистики сервера.
  1. Приложение должно подключаться к серверу по введённому пользователем адресу и порту.
  2. Приложение должно отключаться от сервера.

Правила приёма работы

  1. Отправлена ссылка на репозиторий с кодом ДЗ.

Критерий зачёта

  • реализованы все методы из задания;
  • в приложении используются все сигналы, перечисленные в задании;
  • приложение подключается и отключается от сервера;
  • реализован приём и вывод всех сигналов из задания;
  • ответ от сервера выводится в удобном для пользователя виде. Пример: «Текущие время и дата на сервере 01 фев 2001 21:53:12», а не в виде массива байт.

Дополнительное задание

Дополнительное задание не подлежит проверке. Реализовать приём и отправку всех сообщений согласно Протоколу информационного взаимодействия.


Протокол информационного взаимодействия:

  • сервер отвечает на сообщения клиента;
  • на сервер можно записать строковые данные, которые он интерпретирует как QString;
  • ёмкость сервера — 1000 байт, как только ёмкость израсходуется, сервер будет отвечать ошибкой о нехватке места;
  • сервер отвечает на сообщения клиента согласно настоящему протоколу информационного взаимодействия — ПИВ;
  • в поле статус заголовка выводится или успешный статус или код ошибки в соответствии с ПИВ
  • для запроса информации клиенту необходимо заполнить заголовок в соответствии с текущим ПИВ и передать на сервер;
  • в случае если производится запрос данных с сервера, передаётся только заголовок;
  • все структуры данных на сервере выровнены по одному байту;
  • подключение осуществляется на адрес 127.0.0.1, порт 12345
Общий формат сообщений
Заголовок сообщения Данные

Формат заголовка сообщения

Поле Тип данных Размер, байт
Идентификатор начала сообщения uint16 2
Идентификатор данных в сообщении uint16 2
Статус обработки сообщения uint8 1
Размер данных далее, байт uint32 4

Форматы сообщений (Идентификатор данных в сообщении)

Сообщение Идентификатор сообщения, dec Формат данных ответа
Запрос текущего времени 100 QDateTime
Запрос свободного места на сервере 101 uint32
Запрос статистики 102 -
Передача строки на сервер 200 QString
Освободить место на сервере 201 Ответ заголовком со статусом 1

Формат ответа статистики сервера

Поле Тип данных Размер, байт
Количество принятых байт uint32 4
Количество переданных байт uint32 4
Количество принятых пакетов uint32 4
Количество переданных пакетов uint32 4
Время работы сервера, сек uint32 4
Количество подключённых клиентов uint32 4

Типы ошибок

Код ошибки, dec Значение
10 Недостаточно места на сервере
11 Не указана длина сообщения в заголовке