2014-06-12 131 views
5

我正在爲我們公司編寫喚醒局域網程序。有ca.我們公司有40-50臺機器,它應該喚醒每一位客戶。要喚醒客戶端我用這個代碼:C#喚醒局域網程序不會喚醒每個客戶端

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); 
     } 
    } 
} 

button_Click事件只需要調用方法WakeUp(macAddress)

大多數客戶醒來正常。但在某些客戶端計算機剛停止啓動,並停留在黑色顯示器上,左上角有一個下劃線。我已經爲每個客戶端檢查了3次(ipconfig)的macAddress,並且也在VS2012的調試模式下進行了檢查。它總是相同和正確的。所以它不能成爲一個mac地址問題。

有人知道這個問題嗎?

意見建議:)

回答

10

問題不在於代碼,而在於機器。嘗試調試硬件。

請參閱Wake on Lan是一個神奇的小包。網卡獲取它然後喚醒機器。

這就是你所做的一切。

機器必須正常起牀,並且出現問題。你的魔法包中沒有任何東西可以導致這種情況 - 我會從通常的嫌疑人開始(我的腦海裏會出現biod版本)。

如果機器可以確認已經啓動(然後在啓動過程中停止),那麼這不是一個編程問題。