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

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

Wake On Lan не всегда срабатывает


DelphiN! ©   (2007-07-20 07:46:00) 

Пытаюсь сделать удаленное включение 100 компьютеров следующим образом :


procedure WakeOnLan(IP: String);

 function HexStringToBinString(const HexStr: string): string;
 var
   i, l: integer;
 begin
   Result := '';
   l := length(HexStr);
   l := l div 2;
   SetLength(Result, l);
   for i := 1 to l do
    if HexToBin(PChar(Copy(HexStr, (i - 1) * 2 + 1, 2)),
      PChar(@Result[i]), 1) = 0 then
        raise Exception.Create('Invalid hex value');
 end;

 procedure SendMagicPacket(MACAddress: string);
 var
  s, packet: string;
  i: integer;
  SS: TIdUDPClient;
 begin
  if Length(MACAddress) <> 12 then
   raise Exception.CreateFmt('Invalid MAC Address: %s', [MACAddress]);
  packet := HexStringToBinString('FFFFFFFFFFFF');
  s := HexStringToBinString(MACAddress);
  for i := 1 to 16 do
   packet := packet + s;

  try
    ss := TIdUDPClient.Create(nil);
    ss.Active := true;

    ss.BroadcastEnabled := true;
    ss.Broadcast(packet, 9);
   finally
    ss.Free;
   end;
 end;

begin
 SendMagicPacket(GetMAC(IP));
end;

function GetMAC(IP: String): String;
var
 INI: TINIFile;
begin
 try
   INI := TINIFile.Create(ExtractFilePath(ParamStr(0))+'DATA\MACS.DAT');
   Result := ini.ReadString('MAIN',IP,'');
 finally
   INI.Free;
 end;
end;

for i := 0 to IpList.Count-1 do
 WakeOnLan(IpList.Strings[i]);



Однако включение всех компьютеров производится далеко не всегда. При первой попытке могут включиться все компьютеры, а может не включиться 1 или 10, или 50, или 99. При второй попытке может включиться оставшаяся часть, а может включиться не полностью ...
 С чем связана данная нестабильность и как побороть это?


dzr_gregory   (2007-07-20 10:27:00) [1]

Может быть это связано с UDP? Это ведь протокол без гарантированной доставки пакетов, отсюда и предположение, что часть пакетов может пропадать. Реализуй повторную отправку либо PING удаленным машинам через какое-то время и повторная отправка пакета тем, от кого не был получен ответ на PING.


Наверх

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