Содержание

  1. Введение
    1. Стек сетевых протоколов
    2. Протоколы IPv4 и IPv6
    3. Протокол TCP
    4. Протокол UDP
    5. DNS
  2. Адреса
    1. Адреса хостов
    2. Работа с DNS
    3. Адреса портов
  3. Работа с TCP
    1. Клиентский сокет
      1. Создание
      2. Управление ресурсами
      3. Закрытие части соединения
    2. Серверный сокет
      1. Создание
      2. Прием соединений
  4. Работа с UDP
    1. Датаграммы
      1. Исходящие
      2. Входящие
    2. Сокеты
      1. Создание
      2. Отправка и прием данных
  5. URI и URL
    1. URI
      1. Понятие об URI
      2. Структура URI
      3. Сравнение URI
    2. URL
      1. Понятие об URL
      2. Структура URL
      3. Сравнение URL
  6. Соединения
    1. Создание соединения
    2. Жизненный цикл соединения
    3. Быстрое установление соединения
    4. Поддержка протоколов
  7. Работа с HTTP
    1. Клиент
    2. Сервер

Слайды

HTML

Примеры

zip

Домашнее задание 10. HelloUDP

HelloUDP
  1. Реализуйте клиент и сервер, взаимодействующие по UDP.
  2. Класс HelloUDPClient должен отправлять запросы на сервер, принимать результаты и выводить их на консоль.
    • Аргументы командной строки:
      1. имя или ip-адрес компьютера, на котором запущен сервер;
      2. номер порта, на который отсылать запросы;
      3. префикс запросов (строка);
      4. число параллельных потоков запросов;
      5. число запросов в каждом потоке.
    • Запросы должны одновременно отсылаться в указанном числе потоков. Каждый поток должен ожидать обработки своего запроса и выводить сам запрос и результат его обработки на консоль. Если запрос не был обработан, требуется послать его заного.
    • Запросы должны формироваться по схеме <префикс запросов><номер потока>_<номер запроса в потоке>.
  3. Класс HelloUDPServer должен принимать задания, отсылаемые классом HelloUDPClient и отвечать на них.
    • Аргументы командной строки:
      1. номер порта, по которому будут приниматься запросы;
      2. число рабочих потоков, которые будут обрабатывать запросы.
    • Ответом на запрос должно быть Hello, <текст запроса>.
    • Если сервер не успевает обрабатывать запросы, прием запросов может быть временно приостановлен.
  4. Бонусный вариант. Реализация должна быть полностью неблокирующей.
    • Клиент не должен создавать потоков.
    • В реализации не должно быть активных ожиданий, в том числе через Selector.