2014-06-12 9 views
5

Programuję program Wake on LAN dla naszej firmy. Jest około 40-50 maszyn w naszej firmie i powinna obudzić każdego klienta. Aby obudzić klientów używam tego kodu:C# wake on lan program nie pobudza każdego klienta

private static void WakeUp(string macAddress) 
{ 
    WOLClass client = new WOLClass(); 

    client.Connect(new IPAddress(0xffffffff), 0x2fff); 
    client.SetClientToBroadcastMode(); 

    int counter = 0; 

    byte[] bytes = new byte[1024]; 

    for (int e = 0; e < 6; e++) 
    { 
     bytes[counter++] = 0xFF; 
    } 

    for (int e = 0; e < 16; e++) 
    { 
     int i = 0; 

     for (int w = 0; w < 6; w++) 
     { 
      bytes[counter++] = byte.Parse(macAddress.Substring(i, 2), NumberStyles.HexNumber); 
      i += 2; 
     } 
    } 

    int returnedValue = client.Send(bytes, 1024); 
} 

public class WOLClass : UdpClient 
{ 
    public WOLClass() 
     : base() 
    { 

    } 

    public void SetClientToBroadcastMode() 
    { 
     if (this.Active) 
     { 
      this.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Broadcast, 0); 
     } 
    } 
} 

i button_Click razie po prostu wywołać metodę WakeUp(macAddress)

Większość klientów obudzić się normalnie. Jednak w przypadku niektórych klientów komputer przestaje się uruchamiać i pozostaje na czarnym monitorze z niewielkim podkreśleniem w lewym górnym rogu. Sprawdziłem już macAddress dla każdego klienta 3 razy (ipconfig), a także w trybie debugowania VS2012. To zawsze jest identyczne i poprawne. Więc nie może to być problem z adresem MAC.

Czy ktoś zna ten problem?

Sugestie mile widziane :)

Odpowiedz

10

Problem nie jest kodem, lecz maszyną. Spróbuj debugować sprzęt.

Zobacz, Wake on Lan to magiczny pakiet. Karta sieciowa pobiera ją, a następnie budzi urządzenie.

To wszystko, co robisz.

Maszyna musi wtedy poprawnie się obudzić, a coś pójdzie nie tak. W twoim magicznym pakiecie nie ma nic, co mogłoby to spowodować - zacząłem od zwykłych podejrzanych (biologiczne wersje przychodzą mi na myśl).

Jeśli można potwierdzić, że maszyna została uruchomiona (a następnie zatrzymuje się podczas rozruchu), nie jest to problem programistyczny.