![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Мне необходимо в цикле опросить по сокетам несколько машин
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 ?