一.定義
網絡喚醒:喚醒休眠狀態下的計算機,而不是已關機的計算機。
優勢:可通過定時功能實現自動喚醒計算機,減少人力使用。
實現方法:通過被喚醒機的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"); } }
三.代碼上傳