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