Чтение онлайн

на главную - закладки

Жанры

Основы программирования в Linux
Шрифт:

 struct servent *servinfo;

 char buffer[128];

 if (argc == 1) host = "localhost";

 else host = argv[1];

2. Найдите адрес узла и сообщите об ошибке, если адрес не найден:

 hostinfo = gethostbyname(host);

 if (!host info) {

fprintf(stderr, "no host: %s\n", host);

exit(1);

 }

3. Убедитесь, что на компьютере есть сервис

daytime
:

 servinfo = getservbyname("daytime", "tcp");

 if (!servinfo) {

fprintf(stderr, "no daytime service\n");

exit(1);

 }

 printf("daytime port is %d\n", ntohs(servinfo->s_port));

4. Создайте сокет:

 sockfd = socket(AF_INET, SOCK_STREAM, 0);

5. Сформируйте адрес для соединения:

 address.sin_family = AF_INET;

 address.sin_port = servinfo->s_port;

 address.sin_addr = *(struct in_addr *)*hostinfo->h_addr_list;

 len = sizeof(address);

6. Затем подключитесь и получите информацию:

 result = connect(sockfd, (struct sockaddr *)&address, len);

 if (result == -1) {

perror("oops: getdate");

exit(1);

 }

 result = read(sockfd, buffer, sizeof(buffer));

 buffer[result] = '\0';

 printf("read %d bytes: %s", result, buffer);

 close(sockfd);

 exit(0);

}

Вы можете применять программу

getdate
для получения времени суток с любого известного узла сети.

$ ./getdate localhost

daytime port is 13

read 26 bytes: 24 JUN 2007 06:03:03 BST

$

Если вы получаете сообщение об ошибке, такое как

oops: getdate: Connection refused

или

oops: getdate: No such file or directory

причина может быть в том, что на компьютере, к которому вы подключаетесь, не включен сервис

daytime
. Такое поведение стало стандартным для большинства современных систем Linux. В следующем разделе вы увидите, как включать этот и другие сервисы.

Как это работает

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

daytime
определяется функцией сетевой базы данных
getservbyname
, которая возвращает сведения о сетевых сервисах таким же способом, как и при получении информации об узле сети. Программа
getdate
пытается соединиться с адресом, который указан первым в списке дополнительных адресов заданного узла. Если соединение успешно, программа считывает сведения, возвращаемые сервисом daytime, символьную строку, содержащую системные дату и время.

Интернет-демон (xinetd/inetd)

Системы UNIX, предоставляющие ряд сетевых сервисов, зачастую делают это с помощью суперсервера. Эта программа (интернет-демон xinetd или inetd) ожидает одновременно запросы на соединения с множеством адресов портов. Когда клиент подключается к сервису, программа-демон запускает соответствующий сервер. При таком подходе серверам не нужно работать постоянно, они могут запускаться по требованию.

Примечание

В современных системах Linux роль интернет-демона исполняет программа xinetd. Она заменила оригинальную UNIX-программу inetd, которую вы все еще можете встретить в более ранних системах Linux и других UNIX-подобных системах.

Программа xinetd обычно настраивается с помощью пользовательского графического интерфейса для управления сетевыми сервисами, но вы можете изменять и непосредственно файлы конфигурации программы. К ним относятся файл /etc/xinetd.conf и файлы в каталоге /etc/xinetd.d.

У каждого сервиса, предоставляемого программой xinetd, есть файл конфигурации в каталоге /etc/xinetd.d. Программа xinetd считает все эти файлы конфигурации во время запуска и повторно при получении соответствующей команды.

Далее приведена пара примеров файлов конфигурации xinetd, первый из них для сервиса

daytime
.

# По умолчанию: отключен

# Описание: сервер daytime. Это версия tcp.

service daytime

{

 socket_type = stream

 protocol = tcp

 wait = no

 user = root

 type = INTERNAL

 id = daytime-stream

 FLAGS = IPv6 IPv4

}

Следующий файл конфигурации предназначен для сервиса передачи файлов.

# По умолчанию: отключен

# Описание:

# FTP-сервер vsftpd обслуживает FTP-соединения. Он использует

# для аутентификации обычные, незашифрованные имена пользователей и

# пароли, vsftpd спроектирован для безопасной работы.

#

# Примечание: этот файл содержит конфигурацию запуска vsftpd для xinetd.

# Файл конфигурации самой программы vsftpd находится в

# /etc/vsftpd.conf

service ftp {

# server_args =

# log_on_success += DURATION USERID

# log_on_failure += USERID

# nice = 10

 socket_type = stream

 protocol = tcp

Поделиться:
Популярные книги

Черный Маг Императора 12

Герда Александр
12. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 12

Император Пограничья 10

Астахов Евгений Евгеньевич
10. Император Пограничья
Фантастика:
городское фэнтези
аниме
фантастика: прочее
попаданцы
5.00
рейтинг книги
Император Пограничья 10

Мастер...

Чащин Валерий
1. Мастер
Фантастика:
героическая фантастика
попаданцы
аниме
6.50
рейтинг книги
Мастер...

Гранит науки. Том 2

Зот Бакалавр
2. Героями не становятся, ими умирают
Фантастика:
фэнтези
5.00
рейтинг книги
Гранит науки. Том 2

Адепт. Том 1. Обучение

Бубела Олег Николаевич
6. Совсем не герой
Фантастика:
фэнтези
9.27
рейтинг книги
Адепт. Том 1. Обучение

Тактик

Земляной Андрей Борисович
2. Офицер
Фантастика:
альтернативная история
7.70
рейтинг книги
Тактик

Ст. сержант. Назад в СССР. Книга 5

Гаусс Максим
5. Второй шанс
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Ст. сержант. Назад в СССР. Книга 5

Рассвет русского царства. Книга 2

Грехов Тимофей
2. Новая Русь
Фантастика:
альтернативная история
попаданцы
историческое фэнтези
5.00
рейтинг книги
Рассвет русского царства. Книга 2

Надуй щеки! Том 2

Вишневский Сергей Викторович
2. Чеболь за партой
Фантастика:
попаданцы
дорама
фантастика: прочее
5.00
рейтинг книги
Надуй щеки! Том 2

Черный Маг Императора 18

Герда Александр
18. Черный маг императора
Фантастика:
юмористическое фэнтези
аниме
сказочная фантастика
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Черный Маг Императора 18

Последний Паладин. Том 3

Саваровский Роман
3. Путь Паладина
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 3

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Неправильный лекарь. Том 4

Измайлов Сергей
4. Неправильный лекарь
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Неправильный лекарь. Том 4

Кодекс Охотника. Книга VI

Винокуров Юрий
6. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга VI