(c) Larry Ewing, Simon Budig, Garrett LeSage
с 1994 г.

Кафедра Информатики и Математического Обеспечения

ПетрГУ | ИМиИТ | О кафедре | Проекты | Лаборатория ИТС | Семинары НФИ/AMICT
Сотрудники | Учебный процесс | Табель-календарь | Курсовые и выпускные работы
Вычислительные ресурсы | Публикации | Архив новостей | Контактная информация (English)

Компьютерные сети 2017, задачи

1. IP-адрес по имени - getaddrinfo(), inet_ntop(). Имя по IP-адресу - inet_pton(), getnameinfo().

Написать программу, которая получает один обязательный аргумент командной строки - доменное имя, и выдает все IP-адреса для этого имени. Возможное решение: task1.c

Написать программу, которая получает один обязательный аргумент командной строки - IPv4-адрес, и выдает имя, соответствующее этому адресу.

2. Номер порта по имени сервиса - getaddrinfo(), ntohs(). Имя сервиса по номеру порта - getnameinfo(), strtol(), htons().

Написать программу, которая получает один обязательный аргумент командной строки - имя сервиса, и выдает номер порта для этого сервиса.

Написать программу, которая получает один обязательный аргумент командной строки - номер порта, и выдает соответствующее имя сервиса.

3. Исх. TCP, socket(), connect(), getsockname()

Написать программу, устанавливающую исходящее TCP-соединение по указанному адресу. Обязательные аргументы командной строки - имя или IP-адрес хоста и имя сервиса или номер порта, на которые устанавливать соединение. Должны работать как имена (хоста и сервиса), так и IP-адрес в десятично-точечной нотации и номер порта.

  1. Получить адрес удаленного сокета из аргументов командной строки (адрес - пара "IP или имя хоста" и "порт или имя сервиса");
  2. Создать сокет и установить исходящее TCP-соединение;
  3. После установления соединения вывести адрес для локального сокета (адрес - пара "IP и порт");
  4. Отправить по установленному соединению строку "Hello world!\n";
  5. Получить и вывести на стандартный вывод (stdout) весь ответ;
  6. Закрыть соединение.

4. Исх. UDP, "фиктивный connect() и send()", "sendto() без connect()"

  1. Получить адрес удаленного сокета из аргументов командной строки;
  2. Создать UDP-сокет;
  3. Отправить сообщение "Hello world!\n" используя функцию sendto() без установки постоянного адреса удаленного сокета;
  4. Получить и вывести на стандартный вывод (stdout) весь ответ;
  5. Установить постоянный адрес удаленного сокета с помощью функции connect();
  6. Отправить сообщение "Hello world!\n" используя функцию send() или write()
  7. Получить и вывести на стандартный вывод (stdout) весь ответ;
  8. Закрыть соединение.

5. Вх. UDP, bind(), recv() и recvfrom()

Прием входящих данных по UDP

  1. Получить адрес локального сокета из аргументов командной строки (адрес - порт, IP-адрес необязательно)
  2. Создать UDP-сокет
  3. Установить для него локальный адрес (указанный в командной строке)
  4. Принимать данные и копировать их в стандартный вывод
  5. При этом сообщать, с какого удаленного адреса приняты данные

6. Вх. TCP для одного соединения, accept(), getpeername()

Прием одного входящего соединения по TCP

7. Варианты обработки: fork(), select()

Прием многих входящих соединений по TCP