Сканер диапазона портов
Добавлено: 27 дек 2004, 19:16
Если кто может подскажите пожалуйста что ни так. Я еще только начинаю программировать в C++. Задача следующая: необходимо чтоб программа сканировала диапазон портов, начальный и конечный порт задаются в эдитах StartPort и EndPort, хост в IPEdit и время ожидания в TimeEdit (компонент NMEcho). В эдите PortNow показан порт который сканируется в дунную секунду. Но программа печему-то не работает как нужно, последним стоит 21-й порт, а при повторном сканировании может выдать 56-й или еще какой-нибудь. Как сделать так чтоб цикл не обрывался ни про OnConnect ни при OnConnectionFiled и небыло глюков при повторном сканировании. Вот собственно код проги:
Среда: C++Builder 6
Спасибо.
Код: Выделить всё
. . .
int p=1, t=1;
//---------------------------------------------------------------------------
__fastcall TMain::TMain(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TMain::NMEcho1Connect(TObject *Sender)
{
Memo1->Lines->Add(IntToStr(NMEcho1->Port)+ " порт открыт на "+NMEcho1->Host);
NMEcho1->Disconnect();
if(p<StrToInt(EndPort->Text))
{
t++;
p+=t;
NMEcho1->Port=p;
NMEcho1->Host=(IPEdit->Text);
NMEcho1->TimeOut=StrToInt(TimeEdit->Text);
PortNow->Text=p;
NMEcho1->Connect();
}
}
//---------------------------------------------------------------------------
void __fastcall TMain::StartScanClick(TObject *Sender)
{
NMEcho1->Disconnect();
//t=1;
try
{
p=StrToInt(StartPort->Text);
//p=t;
NMEcho1->Port=p;
NMEcho1->Host=(IPEdit->Text);
NMEcho1->TimeOut=StrToInt(TimeEdit->Text);
PortNow->Text=p;
NMEcho1->Connect();
}
catch(ESockError&)
{
}
}
//---------------------------------------------------------------------------
void __fastcall TMain::NMEcho1ConnectionFailed(TObject *Sender)
{
NMEcho1->Disconnect();
if(p<StrToInt(EndPort->Text))
{
t++;
p+=t;
NMEcho1->Port=p;
NMEcho1->Host=(IPEdit->Text);
NMEcho1->TimeOut=StrToInt(TimeEdit->Text);
PortNow->Text=p;
NMEcho1->Connect();
}
}
Спасибо.