Сетевые технологии. Учебное пособие. Баканов В.М. - 48 стр.

UptoLike

Составители: 

48
Однако чаще всего пользователь работает с доменными именами, приме-
няя сервер DNS или файл HOSTS (см. подраздел 7.1.1). В этом случае следует
воспользоваться функцией
gethostbyname
, возвращающей адрес IP, а затем
записать полученный адрес в структуру
sin_addr:
PHOSTENT phe;
phe = gethostbyname(“ftp.microsoft.com”);
if (phe == NULL)
{
closesocket(srv_socket);
MessageBox(NULL, "Ошибка функции GetHostByName",
"Error", MB_OK);
return;
}
memcpy((char FAR *) & (dest_sin.sin_addr), phe->h_addr, phe->h_length);
В случае ошибки функция
gethostbyname
возвращает
NULL
, после чего при-
чину ошибку можно выяснить путем проверки кода возврата функцией
WSAGetLastError.
Если указанный адрес найден в базе DNS или файле
HOSTS
(см. подраздел
7.1.1), функция
gethostbyname
возвращает указатель на структуру
hostent
,
описанную ниже:
struct hostent
{
char FAR *h_name; // имя узла
char FAR *FAR *h_aliases; // список альтернативных имен
short h_addrtype: // тип адреса узла
short h_lenght; // длина адреса
char FAR *FAR *h_addr_list; // список адресов
#define h_add r h_addr_list[0]; // адрес
};
typedef struct hostent *PHOSTENT;
typedef struct hostent FAR *LPHOSTENT;
Искомый адрес находится в первом элементе списка
h_addr_list[0]
, на кото-
рый можно также ссылаться при помощи
h_addr
, длина поля адреса находит-
ся в поле
h_length
.
  Однако чаще всего пользователь работает с доменными именами, приме-
няя сервер DNS или файл HOSTS (см. подраздел 7.1.1). В этом случае следует
воспользоваться функцией gethostbyname, возвращающей адрес IP, а затем
записать полученный адрес в структуру sin_addr:

PHOSTENT phe;

phe = gethostbyname(“ftp.microsoft.com”);

if (phe == NULL)
{
    closesocket(srv_socket);
    MessageBox(NULL, "Ошибка функции GetHostByName",
                     "Error", MB_OK);
    return;
}

memcpy((char FAR *) & (dest_sin.sin_addr), phe->h_addr, phe->h_length);

   В случае ошибки функция gethostbyname возвращает NULL, после чего при-
чину ошибку можно выяснить путем проверки кода возврата функцией
WSAGetLastError.
   Если указанный адрес найден в базе DNS или файле HOSTS (см. подраздел
7.1.1), функция gethostbyname возвращает указатель на структуру hostent,
описанную ниже:

struct hostent
{
   char FAR *h_name;             // имя узла
   char FAR *FAR *h_aliases;     // список альтернативных имен
   short h_addrtype:            // тип адреса узла
   short h_lenght;              // длина адреса
   char FAR *FAR *h_addr_list; // список адресов
#define h_add r h_addr_list[0]; // адрес
};

typedef struct hostent     *PHOSTENT;
typedef struct hostent FAR *LPHOSTENT;

  Искомый адрес находится в первом элементе списка h_addr_list[0], на кото-
рый можно также ссылаться при помощи h_addr, длина поля адреса находит-
ся в поле h_length.


                                   48