c#網(wǎng)絡(luò)喚醒功能實現(xiàn)
網(wǎng)絡(luò)喚醒實現(xiàn)了對網(wǎng)絡(luò)的集中管理,即在任何時刻,網(wǎng)管中心的IT管理人員可以經(jīng)由網(wǎng)絡(luò)遠程喚醒一臺處于休眠或關(guān)機狀態(tài)的計算機。使用這一功能,IT管理人員可以在下班后,網(wǎng)絡(luò)流量最小以及企業(yè)的正常運作最不受影響的時候完成所有操作系統(tǒng)及應(yīng)用軟件的升級及其他管理任務(wù)。
為了喚醒網(wǎng)絡(luò)上的計算機,用戶必須發(fā)出一種數(shù)據(jù)包,該數(shù)據(jù)包的格式與普通數(shù)據(jù)包不同,而且還必須使用相應(yīng)的專用軟件才能產(chǎn)生。當前比較普遍采用的是AMD公司制作的Magic Packet,這套軟件可以生成網(wǎng)絡(luò)喚醒所需要的特殊數(shù)據(jù)包。該數(shù)據(jù)包包含有連續(xù)6個字節(jié)的“FF”和連續(xù)重復(fù)16次的MAC地址。Magic Packet 雖然只是AMD公司開發(fā)推廣的一項技術(shù),并非業(yè)界公認的標準,但是仍受到很多網(wǎng)卡制造商的支持,因此許多具有網(wǎng)絡(luò)喚醒功能的網(wǎng)卡都能與之兼容。
要使用網(wǎng)絡(luò)喚醒,你必須擁有:
1:可向網(wǎng)卡發(fā)送網(wǎng)絡(luò)“喚醒幀”的軟件。
2:可解碼“喚醒幀”的網(wǎng)卡,該網(wǎng)卡同時還必須可以從輔助電源中獲取能量,并能夠向主板發(fā)送“喚醒信號”。 (基本上都支持)
先說被喚醒機器如何設(shè)置
1.Win7系統(tǒng)下設(shè)置如下圖,計算機-》設(shè)備管理器-》網(wǎng)卡驅(qū)動屬性
2.ipconfig –all 命令查看本機網(wǎng)卡的MAC地址
發(fā)送的網(wǎng)絡(luò)數(shù)據(jù)包顯示如下圖,其中mac地址是隨便填寫的重復(fù)的09。
C#代碼如下:
private IPEndPoint point;
private UdpClient client = new UdpClient();
/**
* 喚醒遠程機器方法
* @param
* mac 要喚醒的機器的MAC
* IP
* port udp消息發(fā)送端口
*
* 摘要:喚醒方法為網(wǎng)卡提供的魔術(shù)封包功能,即以廣播模式發(fā)送6個FF加上16遍目標MAC地址的字節(jié)數(shù)組
**/
private void wakeUp(string mac, int port, string ip)
{
byte[] magicBytes = getMagicPacket(mac);
point = new IPEndPoint(IPAddress.Parse(ip), port);//廣播模式:255.255.255.255
try
{
client.Send(magicBytes, magicBytes.Length, point);
}
catch (SocketException e) { MessageBox.Show(e.Message); }
}
/// <summary>
/// 字符串轉(zhuǎn)16進制字節(jié)數(shù)組
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] strToHexByte(string hexString)
{
hexString = hexString.Replace(" ", "");
if ((hexString.Length % 2) != 0)
hexString += " ";
byte[] returnBytes = new byte[hexString.Length / 2];
for (int i = 0; i < returnBytes.Length; i++)
returnBytes[i] = Convert.ToByte(hexString.Substring(i * 2, 2), 16);
return returnBytes;
}
/// <summary>
/// 拼裝MAC魔術(shù)封包
/// </summary>
/// <param name="hexString"></param>
/// <returns></returns>
public static byte[] getMagicPacket(string macString)
{
byte[] returnBytes = new byte[102];
string commandString = "FFFFFFFFFFFF";
for (int i = 0; i < 6; i++)
returnBytes[i] = Convert.ToByte(commandString.Substring(i * 2, 2), 16);
byte[] macBytes = strToHexByte(macString);
for (int i = 6; i < 102; i++)
{
returnBytes[i] = macBytes[i % 6];
}
return returnBytes;
}
- C#開發(fā)之Socket網(wǎng)絡(luò)編程TCP/IP層次模型、端口及報文等探討
- c# socket網(wǎng)絡(luò)編程接收發(fā)送數(shù)據(jù)示例代碼
- C# Socket網(wǎng)絡(luò)編程實例
- 關(guān)于.NET/C#/WCF/WPF 打造IP網(wǎng)絡(luò)智能視頻監(jiān)控系統(tǒng)的介紹
- C#中判斷本地系統(tǒng)的網(wǎng)絡(luò)連接狀態(tài)的方法
- c#多線程網(wǎng)絡(luò)聊天程序代碼分享(服務(wù)器端和客戶端)
- C#設(shè)置本地網(wǎng)絡(luò)如DNS、網(wǎng)關(guān)、子網(wǎng)掩碼、IP等等
- Visual C#.Net 網(wǎng)絡(luò)程序開發(fā)-Socket篇
- C#同步網(wǎng)絡(luò)時間的方法實例詳解
- C#網(wǎng)絡(luò)適配器簡單操作
相關(guān)文章
C#框架winform實現(xiàn)簡單點餐系統(tǒng)
這篇文章主要為大家詳細介紹了C#框架winform實現(xiàn)簡單點餐系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2021-07-07