Добрый день, Знатоки!
Пишу под ХР, на Borland C++ 6.0,
в программе хочу просканировать сеть и определить IP и имена компов, которые сейчас находятся в on-line.
пример кода:
hostent* hn;
char far *kadr = {"10.61.125.194"};
AnsiString v;
int i, j;
...
...
IdIcmpClient1->Host=Grid1->Cells[1][i]; //список IP адресов сидит в Grid1->Cells[1][i]
IdIcmpClient1->Ping();
if(IdIcmpClient1->ReplyStatus.ReplyStatusType==rsEcho && IdIcmpClient1 ->ReceiveTimeout>0)
{
Grid2->Cells[1][j] = Grid1->Cells[1][i];
v = Grid2->Cells[1][j];
kadr = v.c_str();
a = inet_addr ( kadr );
hn = gethostbyaddr ((char* )&a, 4, AF_INET);
Grid2->Cells[2][j] = (hn->h_name);
}
Проблема 1:
если оставляю последнюю строку кода " Grid2->Cells[2][j] = (hn->h_name);" , то программа вылетает на этой строке
с комментарием
Proect xxx raised exception class EAccessViolation with message 'Access violation at adress 00401D17 in module xxx.
если комментирую последнюю строку кода " Grid2->Cells[2][j] = (hn->h_name);" , то программа работает, но имен компов я не вижу.
Проблема 2:
если не меняю IP адрес, т.е. переменная kadr константа, то программа работает с последней строкой кода, т.е.
пишет имя компа в Grid2->Cells[2][j] = (hn->h_name); , но имя компа одно и тоже, поскольку IP не меняю
помогите пожалуйста найти ошибку