C# 遠程網絡喚醒介紹及代碼


 

一.定義

  網絡喚醒:喚醒休眠狀態下的計算機,而不是已關機的計算機。

  優勢:可通過定時功能實現自動喚醒計算機,減少人力使用。

  實現方法:通過被喚醒機的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");
        }
    }

 

三.代碼上傳

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM