Главная ошибка многие - это писать в Делфи как хочется, а не как надо )
Я имею в виду правильность написания имен апи функция.
GetHostByName считается не правильным написание. Правильное gethostbyname итп.
и дело не в том что в делфи пофигу на регистр а в Си нет. А в том что это имена апишек и если искать их через GetProcAddress то важен регистр символов.
ПО этому лучше писать всё сразу в сишном стиле. Потому как это будет более удобно для переписывания на С/С++ (если конечно такое понадобиться когданить ))
// преобразование IP адреса из символьного в сетевой формат
if (inet_addr(SERVERADDR) != INADDR_NONE)
dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
else
{
// попытка получить IP адрес по доменному имени сервера
if (hst = gethostbyname(SERVERADDR))
// hst->h_addr_list содержит не массив адресов,
// а массив указателей на адреса
((unsigned long *)&dest_addr.sin_addr)[0] =
((unsigned long **)hst->h_addr_list)[0][0];
else
{
printf("Invalid address %s\n", SERVERADDR);
closesocket(my_sock);
WSACleanup();
return -1;
}
}
2) gethostbyname - у одного адреса может быть несколько ip адресов на то и массив в структуре HOSTENT
Код:
struct hostent
{
char FAR * h_name; // официальное имя узла
char FAR * FAR * h_aliases; // альтернативные имена узла (массив строк)
short h_addrtype; // тип адреса
short h_length; // длина адреса (как правило AF_INET)
char FAR * FAR * h_addr_list; // список указателей на IP-адреса
// ноль - конец списка
};