Книга: UNIX: разработка сетевых приложений

Пример: не зависящий от протокола UDP-клиент времени и даты

Пример: не зависящий от протокола UDP-клиент времени и даты

Теперь мы перепишем наш клиент времени и даты, показанный в листинге 11.3, так, чтобы в нем использовалась наша функция udp_client. В листинге 11.10 представлен не зависящий от протокола исходный код.

Листинг 11.10. UDP-клиент времени и даты, использующий нашу функцию udp_client

//names/daytimeudpcli1.c
 1 #include "unp.h"
 2 int
 3 main(int argc, char **argv)
 4 {
 5  int sockfd, n;
 6  char recvline[MAXLINE + 1];
 7  socklen_t salen;
 8  struct sockaddr *sa;
 9  if (argc != 3)
10   err_quit
11    ("usage; daytimeudpcli1 <hostname/IPaddress> <service/port#>");
12  sockfd = Udp_client(argv[1], argv[2], (void**)&sa, &salen);
13  printf("sending to %sn", Sock_ntop_host(sa, salen));
14  Sendto(sockfd, "", 1, 0, sa, salen); /* посылается 1-байтовая
                                            дейтаграмма */
15  n = Recvfrom(sockfd, recvline, MAXLINE, 0, NULL, NULL);
16  recvline[n] = 0; /* завершающий пустой байт */
17  Fputs(recvline, stdout);
18  exit(0);
19 }
12-17
 Мы вызываем нашу функцию udp_client и затем выводим IP-адрес и порт сервера, которому мы отправим нашу дейтаграмму UDP. Мы посылаем однобайтовую дейтаграмму и затем читаем и выводим ответ сервера.

ПРИМЕЧАНИЕ

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

Мы запускаем наш клиент, задавая имя узла с записью типа AAAA и типа А. Поскольку функция getaddrinfo в первую очередь возвращает структуру с записью типа AAAA, создается сокет IPv6:

freebsd % daytimeudpcli1 aix daytime
sending to 3ffe:b80:1f8d:2:204:acff:fe17:bf38
Sun Jul 23:21:12 2003

Затем мы задаем адрес того же узла в точечно-десятичной записи, в результате чего создается сокет IPv4:

freebsd % daytimeudpcli1 192.168.42.2 daytime
sending to 192.168.42.2
Sun Jul 23:21:40 2003

Оглавление книги


Генерация: 1.436. Запросов К БД/Cache: 3 / 1
поделиться
Вверх Вниз