首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >利用C#在局域网上的唤醒

利用C#在局域网上的唤醒
EN

Stack Overflow用户
提问于 2009-05-14 06:42:13
回答 3查看 24.2K关注 0票数 14

使用C#在局域网上实现唤醒的最好方法是什么?

这种功能是局域网环境中的机器所需要的(而不是通过互联网)。该方法需要足够的鲁棒性来处理防火墙和其他此类问题。另外,对于不支持此功能或禁用此功能的系统,是否有其他选择?

主要目标是唤醒局域网上的机器(从关机/hibernate状态),这是使用C#编程的。

请指点。

PS:我遇到了以下情况:

  1. http://blog.memos.cz/index.php/team/2008/06/12/wake-on-lan-in-csharp
  2. http://community.bartdesmet.net/blogs/bart/archive/2006/04/02/3858.aspx
  3. http://www.codeproject.com/KB/IP/cswol.aspx

然而,我对此并不熟悉,因此无法理解这些解决方案是否足够全面。如果有人能推荐以下任何一篇文章,那会有帮助的。

EN

Stack Overflow用户

发布于 2021-01-01 12:48:03

我正在尝试Poul的答案,但没能唤醒我的目标计算机。在验证了第三方应用程序WakeMeOnLan实际上能够唤醒我的目标计算机之后,我编写了以下代码:

代码语言:javascript
复制
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地址,如下所示:

代码语言:javascript
复制
SendWakeOnLan(PhysicalAddress.Parse("0A-0B-0C-0D-0E-0F"));

我认为这个答案和Poul的回答的主要区别是,这个代码使用的是IPv4广播而不是IPv6 4/IPv6 6上的多播,也许我的网络设备没有正确地处理/设置多播。

票数 8
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/861873

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档