一.定義
網絡喚醒:喚醒休眠狀态下的計算機,而不是已關機的計算機。
優勢:可通過定時功能實作自動喚醒計算機,減少人力使用。
實作方法:通過被喚醒機的MAC位址進行廣播發送請求,喚醒計算機。
二.硬體設定
1.Win7系統下設定如下圖,計算機-》裝置管理器-》網卡驅動屬性

2.在BIOS設定允許網絡喚醒
該功能設定介紹起來太墨迹,各位自行百度吧,很簡單...
二.上代碼
技術提示:通過被喚醒機的MAC位址進行喚醒,格式為6遍“FF”+17遍mac的byte類型位元組。
本來想先傳代碼,再進行一步一步講解的,但真是麻煩的不行,直接在代碼裡寫注釋了,各位自己看吧。源代碼在結尾處。
public partial class MainWindow : Window
{
//通過正規表達式設定MAC位址篩選标準,關于正規表達式請自行百度
const string macCheckRegexString = @"^([0-9a-fA-F]{2})(([/\s:-][0-9a-fA-F]{2}){5})$";
private static readonly Regex MacCheckRegex = new Regex(macCheckRegexString);
public MainWindow()
{
InitializeComponent();
}
//喚醒主要邏輯方法
public static bool WakeUp(string mac)
{
//檢視該MAC位址是否比對正規表達式定義,(mac,0)前一個參數是指mac位址,後一個是從指定位置開始查詢,0即從頭開始
if (MacCheckRegex.IsMatch(mac, 0))
{
byte[] macByte = FormatMac(mac);
WakeUpCore(macByte);
return true;
}
return false;
}
private static void WakeUpCore(byte[] mac)
{
//發送方法是通過UDP
UdpClient client = new UdpClient();
//Broadcast内容為:255,255,255,255.廣播形式,是以不需要IP
client.Connect(System.Net.IPAddress.Broadcast, 50000);
//下方為發送内容的編制,6遍“FF”+17遍mac的byte類型位元組。
byte[] packet = new byte[17 * 6];
for (int i = 0; i < 6; i++)
packet[i] = 0xFF;
for (int i = 1; i <= 16; i++)
for (int j = 0; j < 6; j++)
packet[i * 6 + j] = mac[j];
//喚醒動作
int result = client.Send(packet, packet.Length);
}
private static byte[] FormatMac(string macInput)
{
byte[] mac = new byte[6];
string str = macInput;
//消除MAC位址中的“-”符号
string[] sArray = str.Split(\'-\');
//mac位址從string轉換成byte
for (var i = 0; i < 6; i++)
{
var byteValue = Convert.ToByte(sArray[i], 16);
mac[i] = byteValue;
}
return mac;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
WakeUp("00-01-80-7E-C3-D2");
}
}
三.代碼上傳