Флаги позволяют вызывающей стороне просмотреть сообщение без его фактического получения. После возвращения исходная адресная структура заполняется IP-адресом и номером порта клиента. Необходим указатель на длину исходного адреса, поскольку она может быть изменена при вставке в поле фактического адреса клиента.
6. inet_ntoa(clientAddr.sin_addr);
Этот вызов преобразует 32-разрядный адрес Интернета клиента в знакомую нам нотацию этого адреса с точками и десятичными значениями.
21.11 Клиентская программа UDP
Клиент соединяется с сервером, посылает одно сообщение и закрывает соединение. При запуске программы конечный пользователь должен ввести имя хоста, порт сервера и отправляемое на сервер сообщение. Например:
udpclient plum.cs.yale.edu 2315 "Это сообщение."
/* udpclient.с
* Перед запуском клиента следует запустить сервер.
* Далее нужно получить порт сервера.
* Для запуска клиента ввести:
* udpclient имя_хоста порт сообщение */
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <errno.h>
main(argc, argv)
int argc;
char *argv[]; /* Это вводимые пользователем аргументы. */
/* argv[0] - имя программы. argv[1] указывает на имя хоста. */
/* argv[2] ссылается на порт, */
/* а argv [3] ссылается
на текстовое сообщение. */
{
int sock;
struct sockaddr_in, servAddr, clientAddr;
struct hostent *hp, *gethostbyname;
/* Должно быть четыре аргумента. */
if (argc < 4) {
printf ("ВВЕСТИ udpclient имя_хоста порт сообщение\n");
exit(1);
}
/* 1. Создать socket для UDP. */
if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
perror("He получен socket\n");
exit(1);
}
/* 2. Занести адрес и порт сервера в servAddr.
* Сначала заполнить адресную структуру нулями.
* Использовать функцию gethostbyname для получения имени хоста