Страница 1 из 1

Сканер диапазона портов

Добавлено: 27 дек 2004, 19:16
Slash
Если кто может подскажите пожалуйста что ни так. Я еще только начинаю программировать в C++. Задача следующая: необходимо чтоб программа сканировала диапазон портов, начальный и конечный порт задаются в эдитах StartPort и EndPort, хост в IPEdit и время ожидания в TimeEdit (компонент NMEcho). В эдите PortNow показан порт который сканируется в дунную секунду. Но программа печему-то не работает как нужно, последним стоит 21-й порт, а при повторном сканировании может выдать 56-й или еще какой-нибудь. Как сделать так чтоб цикл не обрывался ни про OnConnect ни при OnConnectionFiled и небыло глюков при повторном сканировании. Вот собственно код проги:

Код: Выделить всё

 . . .
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();
 }
}
Среда: C++Builder 6
Спасибо.