Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Вопрос по gethostbyname

4.8K
10 февраля 2006 года
Jump
128 / / 09.11.2005
Эта штука возвращает структуру

 
Код:
struct hostent {
    char FAR *       h_name;
    char FAR * FAR * h_aliases;
    short            h_addrtype;
    short            h_length;
    char FAR * FAR * h_addr_list;
};


Написано, что h_addr_list - нультерминированный список адресов. В моем случает список IP-шек машины.

Запихиваю адреса в комбобокс
Код:
for(int ind=0;ind<10;ind++){
        ip.IP = (int)hp->h_addr_list[ind];
        ComboBox1->Items->Add(Format("%d.%d.%d.%d",ARRAYOFCONST((ip.a,ip.b,ip.c,ip.d))));
    };

/*union IP{
    int IP;
    struct{
    byte a,b,c,d;
    };
};*/ - пояснение, что есть мой тип IP

-- просто 10 адресов под ряд, не обращая внимания на конечный 0.0.0.0 ...
Вопрос: Мой комбобокс заполняется очень странно: т.е. у меня на компе 3 сетевых адаптера, а в комбобоксе сперва идет 3 непонятных абракадабры, потом 0.0.0.0 , и только потом 3 правильных апишника... Я полагал должно быть: Сперва 3 правильных апишника, потом 0.0.0.0, а потом уже что угодно............ Это так и должно быть или в чем дело?
2
10 февраля 2006 года
squirL
5.6K / / 13.08.2003
Цитата:
Originally posted by Jump
Написано, что h_addr_list - нультерминированный список адресов. В моем случает список IP-шек машины.


написано также, что IP адреса возвращаються в структуру в сетевом порядке, т. е. старший байт по младшему адресу. IBM PC совместимые компьютеры хранят данные в виде младший байт по младшему вдресу. так что твои IP надо еще обработать функцией htonl, а уж потом запихивать куда угодно.

4.8K
10 февраля 2006 года
Jump
128 / / 09.11.2005
Цитата:
Originally posted by squirL
написано также, что IP адреса возвращаються в структуру в сетевом порядке, т. е. старший байт по младшему адресу. IBM PC совместимые компьютеры хранят данные в виде младший байт по младшему вдресу. так что твои IP надо еще обработать функцией htonl, а уж потом запихивать куда угодно.



Ок, обработаем. Я так понимаю htonl развернет байты каждого адреса задом-наперед. Странно, я их и без этого вполне успешно использовал... Будет ли оно работать после применения функции... %)

А собственно по теме есть у кого пара драгоценных слов? :)
Почему эта "нультерминированность" такая кривая? Это везде так, или это у меня комп (или еще чего :) ) кривой?

4.8K
12 февраля 2006 года
Jump
128 / / 09.11.2005
Up

У меня этот список выглядит вот так:

Т.е. сперва 3 непонятночего, потом нули, а потом (за нулями!!!) 3 моих адреса (последний немного потер от спамеров и т.п. типов), и далее опять идет непонятночто...
4.8K
12 февраля 2006 года
Jump
128 / / 09.11.2005
Если в качестве входного пораметра указать localhost, то каритина меняется вот так:

Закономерность на лицо, но КАКОГО ЧЕРТА?!!!!
4.8K
12 февраля 2006 года
Jump
128 / / 09.11.2005
Вооо, как фотки сделал, так сам и разобрался!

Эт ж указатели :D :D :D :D :D

Надо было:
 
Код:
for(int ind=0; hp->h_addr_list[ind]!=0; ind++){
        ip.IP = *(int*)hp->h_addr_list[ind];
        ComboBox1->Items->Add(Format("%d.%d.%d.%d",ARRAYOFCONST((ip.a,ip.b,ip.c,ip.d))));
    };


Это ж бубль-гум © :D :D :D :D
11K
12 февраля 2006 года
TheFeaR
24 / / 06.01.2006
попробуй сделать так
Код:
WSADATA wsaData;
char chInfo[64];
hostent *sh;
String LocalIP;
if (!WSAStartup(WINSOCK_VERSION, &wsaData))
{
if (!gethostname(chInfo,sizeof(chInfo)))
{
sh=gethostbyname((char*)&chInfo);
if (sh!=NULL)
{
int nAdapter = 0;
GroupBox3->Caption="&#209;&#229;&#242;&#252;. &#194;&#224;&#248; IP:";
while (sh->h_addr_list[nAdapter])
{
struct sockaddr_in adr;
memcpy(&adr.sin_addr,sh->h_addr_list[nAdapter],sh->h_length);
ListBox1->Items->Add(inet_ntoa(adr.sin_addr));
nAdapter++;
}
}
}
}
WSACleanup();
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог