Читать книгу 📗 "Основы программирования в Linux - Мэтью Нейл"
char buffer[128]; if (argc == 1) host = "localhost"; else host = argv[1];2. Найдите адрес узла и сообщите об ошибке, если адрес не найден:
hostinfo = gethostbyname(host); if (!host info) { fprintf(stderr, "no host: %sn", host); exit(1); }3. Убедитесь, что на компьютере есть сервис
daytime servinfo = getservbyname("daytime", "tcp"); if (!servinfo) { fprintf(stderr, "no daytime servicen"); exit(1); } printf("daytime port is %dn", 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] = ' '; printf("read %d bytes: %s", result, buffer); close(sockfd); exit(0);}Вы можете применять программу
getdate$ <b>./getdate localhost</b>daytime port is 13read 26 bytes: 24 JUN 2007 06:03:03 BST$Если вы получаете сообщение об ошибке, такое как
oops: getdate: Connection refusedили
oops: getdate: No such file or directoryпричина может быть в том, что на компьютере, к которому вы подключаетесь, не включен сервис
daytimeКак это работает
При выполнении данной программы можно задать узел, к которому следует подключиться. Номер порта сервиса
daytimegetservbynamegetdateИнтернет-демон (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.confservice ftp {# server_args =# log_on_success += DURATION USERID# log_on_failure += USERID# nice = 10 socket_type = stream protocol = tcp wait = no