C++ проверить определенный порт у группы компьютеров
Создана: 20 Августа 2008 Срд 22:42:57.
Раздел: "Компьютерный раздел"
Сообщений в теме: 2, просмотров: 634
-
Вот встала передо мной такая задача.
Есть диапазон ip-адресов: xxx.yyy.zzz.ccc и порт: ppp
Я не знаю только значение zzz.
Необходимо пробежаться по всем ip-адресам, перебирая zzz от 0 до 254.
Если компьютер живой (как лучше это проверить?), то проверить открыт ли на нем порт ppp. Если открыт, то вывести найденный ip и прекратить поиск.
Написал такую прогу на C++ Builder 6:
Код:
SOCKET socket1;
WSADATA winSockData;
sockaddr_in peer;
char ipaddr[25];
unsigned short port;
int result;
int ipdiap;
bool find = FALSE;
WSAStartup(0x0101, &winSockData);
ProgressBar1->Max=254;
ProgressBar1->Min=0;
ProgressBar1->Position=0;
for(ipdiap=0;ipdiap<=254;ipdiap++)
{
ProgressBar1->Position=ipdiap;
Edit3->Text=ipdiap;
strcpy(ipaddr,"");
strcat(ipaddr,Edit1->Text.c_str());
strcat(ipaddr,".");
strcat(ipaddr,Edit2->Text.c_str());
strcat(ipaddr,".");
strcat(ipaddr,Edit3->Text.c_str());
strcat(ipaddr,".");
strcat(ipaddr,Edit4->Text.c_str());
peer.sin_addr.s_addr = inet_addr(ipaddr);
socket1 = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
peer.sin_family = AF_INET;
peer.sin_port = htons(StrToInt(Edit5->Text));
result = connect(socket1, (sockaddr *) &peer, sizeof(peer));
if (result != 0) {
closesocket(socket1);
WSACleanup();
}
else {
Memo1->Lines->Add("Компьютер найден:");
Memo1->Lines->Add(ipaddr);
find = TRUE;
closesocket(socket1);
WSACleanup();
break;
}
}
if(find == FALSE)
{
Memo1->Lines->Add("Не найдено.");
}
Но она почему-то сначала делает большую задержку (порядка 10-15 секунд), а потом быстро пробегает до конца. Сообщает что компьютеров не обнаружено, хотя они там точно есть. Если компьютер находится в начале списка то он определяется.
Уважаемые знатоки, помогите советом.
з.ы. Сильно не пинать, на c++ редко программирую. -