C#wake on lan程序不会唤醒每个客户端

时间:2014-06-12 14:41:23

标签: c# wake-on-lan

我为我们公司编写了一个唤醒LAN程序。有大约我们公司有40-50台机器,应该唤醒每个客户。为了唤醒客户端,我使用以下代码:

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)

大多数客户正常醒来。但在一些客户端,计算机只是停止启动并停留在左下角有一点下划线的黑色显示器中。我已经为每个客户端检查了macAddress 3次(ipconfig)以及VS2012的调试模式。它总是完全相同和正确的。所以它不能成为mac地址问题。

有人知道这个问题吗?

建议赞赏:)

1 个答案:

答案 0 :(得分:10)

问题不在于代码,而在于机器。尝试调试硬件。

请参阅,Wake on Lan是一个神奇的数据包。网卡获取它然后唤醒机器。

这就是你所做的一切。

然后机器必须正常唤醒,那里出了点问题。你的魔法包中没有任何东西可以导致这种情况 - 我会从通常的嫌疑人(我想到的biod版本)开始。

如果可以确认机器已经启动(然后在启动期间停止),那么这不是编程问题。