C# 远程唤醒(远程开机)

C# 远程唤醒(远程开机)C#远程唤醒(远程开机)近日,小白要用到远程开机的功能,网上大多介绍的是MagicPacket的工具。实际上,此MagicPacket是AMD公司开发的,请在google.cn中搜索MagicPacketTechnology。原理上我们不用深入,实现上是发一个BroadCast包,包的内容包括以下数据就可以了。FFFFFFFFFFFF,6个FF是数据的开始,紧跟着16次

大家好,又见面了,我是你们的朋友全栈君。

C# 远程唤醒(远程开机)

近日,小白要用到远程开机的功能,网上大多介绍的是Magic Packet的工具。实际上,此Magic Packet是AMD公司开发的,请在google.cn中搜索Magic Packet Technology。原理上我们不用深入,实现上是发一个BroadCast包,包的内容包括以下数据就可以了。FF FF FF FF FF FF,6个FF是数据的开始,紧跟着16次MAC地址就可以了。比如MAC地址是11 22 33 44 55 66,那么数据就是FF FF FF FF FF FF 11 22 33 44 55 66 11 22 33 44 55 66 11 22 33 44 55 66……..(11 22 33 44 55 66重复16次)。这个数据在包的任何位置都可以,或者包仅为这个数据。然后网播出去就可以了。简单的实现如下:
 

 1  private   static   void  WakeUp( byte [] mac) {


 2              UdpClient client  =   new  UdpClient();

 3              client.Connect(IPAddress.Broadcast,  30000 );

 4              

 5               byte [] packet  =   new   byte [ 17   *   6 ];

 6 

 7               for  ( int  i  =   0 ; i  <   6 ; i ++ )

 8                  packet[i]  =   0xFF ;

 9 

10               for  ( int  i  =   1 ; i  <=   16 ; i ++ )

11                   for  ( int  j  =   0 ; j  <   6 ; j ++ )

12                      packet[i  *   6   +  j]  =  mac[j];

13 

14               int  result  =  client.Send(packet, packet.Length);

15          }

PS:跨路由器的问题(不是公网IP问题)。如果机器A和机器B处于同一个网段内,用client.Connect(IPAddress.Broadcast,port)是可以的,如果A和B不是处于同一个网段内,那么就要用网段内的广播地址,比如A机器是192.168.1.2,B机器IP地址是192.168.100.3,用A远程唤醒B,就要用B网段的广播地址,192.168.100.255。
IPAddress ip = new IPAddress(new byte[]{192,168,100,255});
client.Connect(ip,port)。原理可以参考网络协议。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/141987.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号