c#唤醒局域网程序不会唤醒每个客户端

本文关键字:唤醒 客户端 局域网 程序 | 更新日期: 2023-09-27 18:08:33

我正在为我们公司编写一个唤醒局域网程序。我们公司大约有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地址问题。

有人知道那个问题吗?

感谢建议:)

c#唤醒局域网程序不会唤醒每个客户端

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

看,局域网唤醒是一个神奇的数据包。网卡得到它,然后唤醒机器。

这就是你所做的。

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

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