Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Мне необходимо в цикле опросить по сокетам несколько машин


Sadya ©   (2003-11-11 17:48:00) 

Здравствуйте, мастера !

Смысл в том, что у меня есть список машин, которым я должен подать команду и получить от них некоторые файлы. Ситуация когда у меня одна машина, все работает как надо, но когда машин несколько, сразу встает вопрос: как остановить цикл, пока не обработается одна машинка, чтобы только после этого перейти к следующей ?

Код приблизительно такой :
for i:=0 to hosts.Count-1 do
begin
HostConnect.Host:=hosts[i];
ConnectType:="GetFileNames";
SaveFromHost:=ExtractFilePath(Application.ExeName)+"hosts\"+hosts[i]+"\fileslist.tsc";
HostConnect.Active:=True;
end;


Sadya   (2003-11-12 18:41:00) [1]

Точно, я был невнимательным, теперь вроде все пучком


Digitman   (2003-11-12 18:21:00) [2]


> Интересно, что я делаю не так ?


делаешь ты "не так" вот что :


> повторное подключение пытаюсь организовать прямо в Disconnect


хотя я русским языком тебе сказал (цитирую) :


> возникает событие OnDisconnect() или OnError() - шлешь самому
> себе некое сообщение А (PostMessage) и успокаиваешься


Sadya   (2003-11-12 17:51:00) [3]

Господа, массив формирую, один раз все пересылается, а потом опять тишина, повторное подключение пытаюсь организовать прямо в Disconnect:

procedure TMainForm.HostConnectDisconnect(Sender: TObject;
Socket: TCustomWinSocket);
begin
SetLength(Connections,Length(Connections)-1);
if Length(Connections)>0 then
begin
HostConnect.Host:=Connections[Length(Connections)-1][0];
HostConnect.Open;
end;
end;

*********************
Connections - это массив, где хранится список подключений
Интересно, что я делаю не так ?


Sadya   (2003-11-12 13:57:00) [4]

Спасибо за совет, попробую. О результатах напишу


Digitman   (2003-11-12 13:48:00) [5]


> Т.е. с циклом мне никак не справится, функции типа WaitForDisconect
> нету и задача решаема только через таймер


глупости.

берешь один-единственный компонент TClientSocket,

задаешь ему параметры очередного сервера и просто выполняешь Open(), засим успокаиваешься и занимаешься прочими делами (1)

возникает событие OnConnect() - производишь нужный инф.обмен с сервером

возникает событие OnDisconnect() или OnError() - шлешь самому себе некое сообщение А (PostMessage) и успокаиваешься

получаешь сообщение А, и если в списке есть еще серверы, с которыми нужно произвести инф.обмен, здесь же, в его обработчике сообщения А выполняешь (1), иначе - конец, выход


Sadya   (2003-11-12 13:08:00) [6]

Т.е. с циклом мне никак не справится, функции типа WaitForDisconect нету и задача решаема только через таймер


Digitman   (2003-11-12 10:53:00) [7]


> В смысл в том, что пока не закончился цикл не обрабатываются
> события OnConnect и Read


и что ?


Михаил   (2003-11-12 10:24:00) [8]

Я обычно делаю проще:
вставляю таймер который например читает файл со списком адресов - 1-ый пошел, читать_дальше_файл = false, далее переменная для выдачи результатов, если ошибка, то в лог, если сделала то тоже в лог, далее как выполнилась функция, то читать_дальше_файл = true, а Таймер ожидает true и шпарит дальше.


Sadya   (2003-11-11 18:15:00) [9]

Прошу прощения:
HostConnect: TClientSocket;

В смысл в том, что пока не закончился цикл не обрабатываются события OnConnect и Read


Digitman   (2003-11-11 18:07:00) [10]

какой тип у идент-ра HostConnect ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо