Компьютерные сети 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-адрес в десятично-точечной нотации и номер порта.
- Получить адрес удаленного сокета из аргументов командной строки (адрес - пара "IP или имя хоста" и "порт или имя сервиса");
- Создать сокет и установить исходящее TCP-соединение;
- После установления соединения вывести адрес для локального сокета (адрес - пара "IP и порт");
- Отправить по установленному соединению строку "Hello world!\n";
- Получить и вывести на стандартный вывод (stdout) весь ответ;
- Закрыть соединение.
4. Исх. UDP, "фиктивный connect() и send()", "sendto() без connect()"
- Получить адрес удаленного сокета из аргументов командной строки;
- Создать UDP-сокет;
- Отправить сообщение "Hello world!\n" используя функцию sendto() без установки постоянного адреса удаленного сокета;
- Получить и вывести на стандартный вывод (stdout) весь ответ;
- Установить постоянный адрес удаленного сокета с помощью функции connect();
- Отправить сообщение "Hello world!\n" используя функцию send() или write()
- Получить и вывести на стандартный вывод (stdout) весь ответ;
- Закрыть соединение.
5. Вх. UDP, bind(), recv() и recvfrom()
Прием входящих данных по UDP
- Получить адрес локального сокета из аргументов командной строки (адрес - порт, IP-адрес необязательно)
- Создать UDP-сокет
- Установить для него локальный адрес (указанный в командной строке)
- Принимать данные и копировать их в стандартный вывод
- При этом сообщать, с какого удаленного адреса приняты данные
6. Вх. TCP для одного соединения, accept(), getpeername()
Прием одного входящего соединения по TCP
7. Варианты обработки: fork(), select()
Прием многих входящих соединений по TCP