Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.01.13;
Скачать: CL | DM;

Вниз

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

 
Sadya   (2003-11-11 17:48) [0]

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

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

Код приблизительно такой :
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;


 
Digitman ©   (2003-11-11 18:07) [1]

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


 
Sadya   (2003-11-11 18:15) [2]

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

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


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

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


 
Digitman ©   (2003-11-12 10:53) [4]


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


и что ?


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

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


 
Digitman ©   (2003-11-12 13:48) [6]


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


глупости.

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

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

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

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

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


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

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


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

Господа, массив формирую, один раз все пересылается, а потом опять тишина, повторное подключение пытаюсь организовать прямо в 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 - это массив, где хранится список подключений
Интересно, что я делаю не так ?


 
Digitman ©   (2003-11-12 18:21) [9]


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


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


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


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


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


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

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



Страницы: 1 вся ветка

Текущий архив: 2004.01.13;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.014 c
1-37736
serg128
2003-12-30 13:07
2004.01.13
Kak получить номер (индекс) выбранного узла в TTreeView?


3-37527
Verba
2003-12-13 13:59
2004.01.13
Select в TAdsQuery


8-37800
Незнайко
2003-09-13 12:45
2004.01.13
DynamicSkinForm


3-37533
User_OKA
2003-12-16 10:33
2004.01.13
Триггер


3-37507
serg128
2003-12-16 18:28
2004.01.13
Как определить в гриде текущй тип поля?