使用C#在局域网上实现唤醒的最好方法是什么?
这种功能是局域网环境中的机器所需要的(而不是通过互联网)。该方法需要足够的鲁棒性来处理防火墙和其他此类问题。另外,对于不支持此功能或禁用此功能的系统,是否有其他选择?
主要目标是唤醒局域网上的机器(从关机/hibernate状态),这是使用C#编程的。
请指点。
PS:我遇到了以下情况:
然而,我对此并不熟悉,因此无法理解这些解决方案是否足够全面。如果有人能推荐以下任何一篇文章,那会有帮助的。
发布于 2021-01-01 12:48:03
我正在尝试Poul的答案,但没能唤醒我的目标计算机。在验证了第三方应用程序WakeMeOnLan实际上能够唤醒我的目标计算机之后,我编写了以下代码:
void SendWakeOnLan(PhysicalAddress target)
{
var header = Enumerable.Repeat(byte.MaxValue, 6);
var data = Enumerable.Repeat(target.GetAddressBytes(), 16).SelectMany(mac => mac);
var magicPacket = header.Concat(data).ToArray();
using var client = new UdpClient();
client.Send(magicPacket, magicPacket.Length, new IPEndPoint(IPAddress.Broadcast, 9));
}用法:
只需输入目标计算机的mac地址,如下所示:
SendWakeOnLan(PhysicalAddress.Parse("0A-0B-0C-0D-0E-0F"));我认为这个答案和Poul的回答的主要区别是,这个代码使用的是IPv4广播而不是IPv6 4/IPv6 6上的多播,也许我的网络设备没有正确地处理/设置多播。
https://stackoverflow.com/questions/861873
复制相似问题