void __fastcall TMain::Connaction()
{
op:
try
{
FTP->Host = tools->host;
FTP->UserID = tools->login;
FTP->Password = tools->pass;
FTP->Port = tools->port;
if(tools->pasiv)FTP->Passive = true;
else FTP->Passive = false;
//RSAdd - добавлние строки в RichEdite
RSAdd("Соединяемся по адрессу: "+FTP->Host+", порт: "+IntToStr(FTP->Port),fsBold,clGreen,RS);
FTP->Connect();
}
catch(...)
{
RSAdd("Ошибка соединения!!! С по адрессу: "+tools->host+", порт: "+IntToStr(tools->port),fsBold,clRed,RS);
// list - StringList, count - номер записи
count+=2;
if(count>list->Counht)return;
tools->host = list->String[count];
tools->port = list->String[count+1];
goto op;
}
}
соединение с FTP по списку
Реализовал перехватывая любую ошибку при соединении:
Код:
До рабочего сервера в списке доходит, но при этом перебирает спикок сотни раз. Подскажите какую проверку вставить чтоб он не лапатил список зря.
P.S. Ловить какое-то другое событие (InvalidHost,HostResolved и т.д.) не стал. Так как сразу сделал проверку при каких ситуациях, что срабатывает
- никакой закономерности не нашёл! При отсутствии хоста вылетает ConnectionFailed, повторяю попытку - уже ConnectionFailed молчит, а срабатыает
FTPError (ошибка 10022). При рабочем сервере, но на другом порту - ни одно из имеющихся событий в TNMFTP не сработало, выкинуло окно с ошибкой - "Connction Timed out". А учесть надо все ситуации.
Реализовал перехватывая любую ошибку при соединении:
Код:
void __fastcall TMain::Connaction()
{
op:
try
{
FTP->Host = tools->host;
FTP->UserID = tools->login;
FTP->Password = tools->pass;
FTP->Port = tools->port;
if(tools->pasiv)FTP->Passive = true;
else FTP->Passive = false;
//RSAdd - добавлние строки в RichEdite
RSAdd("Соединяемся по адрессу: "+FTP->Host+", порт: "+IntToStr(FTP->Port),fsBold,clGreen,RS);
FTP->Connect();
}
catch(...)
{
RSAdd("Ошибка соединения!!! С по адрессу: "+tools->host+", порт: "+IntToStr(tools->port),fsBold,clRed,RS);
// list - StringList, count - номер записи
count+=2;
if(count>list->Counht)return;
tools->host = list->String[count];
tools->port = list->String[count+1];
goto op;
}
}
{
op:
try
{
FTP->Host = tools->host;
FTP->UserID = tools->login;
FTP->Password = tools->pass;
FTP->Port = tools->port;
if(tools->pasiv)FTP->Passive = true;
else FTP->Passive = false;
//RSAdd - добавлние строки в RichEdite
RSAdd("Соединяемся по адрессу: "+FTP->Host+", порт: "+IntToStr(FTP->Port),fsBold,clGreen,RS);
FTP->Connect();
}
catch(...)
{
RSAdd("Ошибка соединения!!! С по адрессу: "+tools->host+", порт: "+IntToStr(tools->port),fsBold,clRed,RS);
// list - StringList, count - номер записи
count+=2;
if(count>list->Counht)return;
tools->host = list->String[count];
tools->port = list->String[count+1];
goto op;
}
}
До рабочего сервера в списке доходит, но при этом перебирает спикок сотни раз. Подскажите какую проверку вставить чтоб он не лапатил список зря.
P.S. Ловить какое-то другое событие (InvalidHost,HostResolved и т.д.) не стал. Так как сразу сделал проверку при каких ситуациях, что срабатывает
- никакой закономерности не нашёл! При отсутствии хоста вылетает ConnectionFailed, повторяю попытку - уже ConnectionFailed молчит, а срабатыает
FTPError (ошибка 10022). При рабочем сервере, но на другом порту - ни одно из имеющихся событий в TNMFTP не сработало, выкинуло окно с ошибкой - "Connction Timed out". А учесть надо все ситуации.[/QUOTE]
Для таких задач в событии компонента существует событие onFailure - в нем и нужно обрабатывать ошибки соединения в том числе. Более подробно смотри $(BCB)\Examples\FastNet\FTP
Дело не в том чтоб найти где обрабатывать, а в том как обрабатывать. Там где я перехватываю все ошибки ловятся. На ConnactionFailed те же проблемы - не знаю как определить, что компонент уже прекратил соединяться, уже не занят. Получается - он ещё не прекратил это неудачное соединение, а его ещё раз заставляю соединяться. Где отслеживать активность компонента я не нашёл, параметр Status - показыавет есть соединение с сервером, или нет.