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

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

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

Системное программирование, сокеты

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

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

Сокеты

  1. Написать программу для иллюстрации преобразования порядка байт:
    • получить один обязательный аргумент командной строки - беззнаковое целое 32-битное число и сохранить в переменной
    • затем вывести содержимое ячеек памяти, в которых хранится эта переменная
    • преобразовать число в сетевой порядок байт и сохранить в другой переменной
    • вывести содержимое ячеек памяти, в которых хранится новая переменная
    • преобразовать получившееся число в презентационный формат (строка) и вывести
    >./a.out 0x01020304
    host byte order:
    s_addr=0x01020304, 0x04:0x03:0x02:0x01
    network byte order:
    s_addr=0x04030201, 0x01:0x02:0x03:0x04
    s=1.2.3.4
    
  2. Написать программу для получения IP-адресов по имени хоста (если это возможно):
    > host ya.ru
    YA.ru has address 87.250.250.242
    YA.ru has IPv6 address 2a02:6b8::2:242
    ...
    
  3. Написать программу для получения имени хоста по IP-адресу (если это возможно):
    > host 8.8.8.8
    8.8.8.8.in-addr.arpa domain name pointer google-public-dns-a.google.com.
    > host 1.2.3.4
    Host 4.3.2.1.in-addr.arpa. not found: 3(NXDOMAIN)
    
  4. Написать TCP эхо-сервер:
    • один обязательный аргумент командной строки - номер порта
    • создать TCP-сокет, назначить ему полученный номер порта, принимать входящие соединения
    • для каждого нового соединения:
      • вывести информацию о том, откуда пришло соединение (IP-адрес и порт)
      • создать процесс, который все полученные данные будет отправлять обратно
    • после закрытия соединения порожденный процесс должен корректно завершаться (не оставаться в состоянии zombie)
    Для тестирования можно использовать утилиту netcat:
    > echo test | netcat -q1 kappa echo
    test