我为我们公司编写了一个唤醒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地址问题。
有人知道这个问题吗?
建议赞赏:)
答案 0 :(得分:10)
问题不在于代码,而在于机器。尝试调试硬件。
请参阅,Wake on Lan是一个神奇的数据包。网卡获取它然后唤醒机器。
这就是你所做的一切。
然后机器必须正常唤醒,那里出了点问题。你的魔法包中没有任何东西可以导致这种情况 - 我会从通常的嫌疑人(我想到的biod版本)开始。
如果可以确认机器已经启动(然后在启动期间停止),那么这不是编程问题。