网络唤醒的原理原来是这样的,GET!
前情回顾,亿元程序员为我们介绍了网络唤醒的原理及其实现。下面主要分享一下多种语言版本的网络化唤醒实现。

网络唤醒多种语言实现

1.小程序

//构建魔术包
MakeMagicPack: function(mac) {mac = mac.trim();//正则校验MACvar rep = new RegExp("[^0-9a-zA-Z]+",'ig')mac = mac.replace(rep,"")if (mac.length != 12) {//不正确return false;}let arr = [];let count =0;for(let i=0,len=mac.length/2;i<len;i++) {let str1 = mac.substr(0,2);mac = mac.replace(str1,'');arr.push(str1)}mac = arr.join(' ')let magicPack = 'FF FF FF FF FF FF'for(var i = 0 ;i < 16 ;i++) {magicPack += (' ' + mac)}return magicPack.toUpperCase()
},
//转成二进制数据
Tobuffer: function(magicPack)
{magicPack = magicPack.split(new RegExp(" ", "gm")) //格式化var buf = new ArrayBuffer(magicPack.length); // 构造指定长度的ArrayBuffervar bufView = new Uint8Array(buf);//构造指定长度的Uint8Array// 换算16进制的数据为 Unicode 编码for (var i = 0, f= ''; i < magicPack.length; i++) {f = parseInt('0x'+magicPack[i])bufView[i] = f;}return buf;
},
//发送数据包
WakeOnLAN: function(e) {
var data = this.data.list[e.currentTarget.id]
let udp = wx.createUDPSocket()
udp.bind()
udp.send({address:data.address,port: data.port,message: this.Tobuffer(this.MakeMagicPack(data.mac))
})
setTimeout(function() {udp.close()
}, 2000)wx.showToast({title: '开机成功',icon: 'success',duration: 2000
})
}

2.Java

//构建魔术包
private static byte[] MakeMagicPack(String mac) throws IllegalArgumentException {
byte[] bytes = new byte[6];
String[] hex = mac.split("(\\:|\\-)");
if (hex.length != 6) {
throw new IllegalArgumentException("Invalid MAC address.");
}
try {
for (int i = 0; i < 6; i++) {
bytes[i] = (byte) Integer.parseInt(hex[i], 16);
}
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid hex digit in MAC address.");
}
return bytes;
}//发送数据包
private String WakeOnLAN(String name, String host, String mac, int port) {try {byte[] macBytes = MakeMagicPack(mac);//转成字节类型byte[] bytes = new byte[6 + 16 * macBytes.length];for (int i = 0; i < 6; i++) {bytes[i] = (byte) 0xff;}for (int i = 6; i < bytes.length; i += macBytes.length) {System.arraycopy(macBytes, 0, bytes, i, macBytes.length); //放入16个MAC地址}InetAddress address = InetAddress.getByName(host);DatagramPacket packet = new DatagramPacket(bytes, bytes.length, address, port);DatagramSocket socket = new DatagramSocket();socket.send(packet);socket.close();return "开机成功";} catch (Exception e) {return "开机失败";}
}

3.C#

private IPEndPoint point;
private UdpClient client = new UdpClient();//转成二进制数据
public static byte[] Tobuffer(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;
}//构建魔术包
public static byte[] MakeMagicPack(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 = Tobuffer(macString);for (int i = 6; i < 102; i++){returnBytes[i] = macBytes[i % 6];}return returnBytes;
}//发送数据包
private void WakeOnLAN(string mac, int port, string ip)
{byte[] magicBytes = MakeMagicPack(mac);point = new IPEndPoint(IPAddress.Parse(ip), port);//广播模式:255.255.255.255try{client.Send(magicBytes, magicBytes.Length, point);}catch (SocketException e) { MessageBox.Show(e.Message); }
}

4.C语言

#include <stdio.h>
#include <arpa/inet.h>
#include <sys/ioctl.h>
#include <net/if.h>
#include <string.h>
#include <unistd.h>
#include <stdlib.h>int main(int argc, char* argv[])
{unsigned char mac[6]={0x00,0x10,0x20,0x30,0x40,0x50};//目的主机MAC地址,例如: 00:10:20:30:40:50unsigned char packet[102];struct sockaddr_in addr;int sockfd, i,j, on = 1;//构建magic packetfor(i=0;i<6;i++)            packet[i] = 0xFF;    for(i=1;i<17;i++)for(j=0;j<6;j++)packet[i*6+j] = mac[j];//UDPsockfd = socket(AF_INET, SOCK_DGRAM, 0);//广播setsockopt(sockfd, SOL_SOCKET, SO_BROADCAST,&on, sizeof(on));if(sockfd < 0)exit(0);memset((void*)&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(10000);addr.sin_addr.s_addr = inet_addr("xxx.xxx.xxx.xxx");//广播地址sendto(sockfd, packet, sizeof(packet), 0, (struct sockaddr *)&addr, sizeof(addr));close(sockfd);return 0;
}

5.Python

#!/usr/bin/python
from socket import socket, AF_INET, SOCK_DGRAM, SOL_SOCKET, SO_BROADCAST
#mac = '08:62:66:8A:2D:6D'#192.168.2.55
data = b'\xFF\xFF\xFF\xFF\xFF\xFF' + b'\x08\x62\x66\x8A\x2D\x6D' * 16
#mac = '00:E0:4C:38:EE:E7'
sock = socket(AF_INET, SOCK_DGRAM)
sock.setsockopt(SOL_SOCKET, SO_BROADCAST, 1)
sock.sendto(data, ('192.168.2.255', 9))
sock.close()
#网络唤醒192.168.2.55的电脑

6.Lua

mac = '1a2b3c4d5e6f'   -- 要进行目标主机的MAC地址bip = '255.255.255.255' -- 路由器广播地址
head = 'FFFFFFFFFFFF'   -- 数据头
head = to(head)
mac = to(mac)
for i = 1, 16 dohead = head .. mac
end
u = net.createUDPSocket()
u:send(1234, bip, head)   -- 使用9号端口
u:close()-- 将两个一组字符串表示的十六进制转为十六进制的字符串
-- 'ff'(66 66) -> 0xff -> '.'(255)
function to(str)ret = ''for i = 1, string.len(str), 2 dobyte = ('0x' .. string.sub(str, 0 + i, 1 + i))a = tonumber(byte)ret = ret .. string.char(a)endreturn ret
end

至此,亿元程序员为大家分享了6种语言实现网络唤醒,大家可以根据自己擅长的语言去选择相应的关键代码实现。谢谢大家,期待您的关注、分享、收藏、点赞、在看五连~

推荐阅读:
如此高端大气上档次的WOL网络唤醒一键遥控远程开机,想不想学?
网络唤醒远程开机+远程控制,免费一键WOL遥控开机控制你学会了吗?
WOL网络唤醒远程开机的关键步骤,魔术唤醒一步都不能少!
如此好用免费的wol网络唤醒远程开机工具,怎么可以错过?
助力wol网络唤醒远程开机,内网穿透技术你了解吗?
学会远程开机之后,发现远程控制软件特别多,哪些好用?哪些免费?
Windows远程桌面怎么使用,看完马上学会!
震惊!VNC Viewer for Mac 这样配置真快捷!
网络唤醒的原理原来是这样的,GET!

网络唤醒多种语言实现相关推荐

  1. python使用fpdf生成pdf文件:配置多种语言字体写入多种文字

    python使用fpdf生成pdf文件:配置多种语言字体写入多种文字 目录

  2. 【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录

    文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<数据结构与算法> 3. 专栏目录 [经典回放]多种语言系列数据结构 ...

  3. 在成长中遇到的挫折事件对你的影响_多种语言环境中成长的宝宝,会影响说话早晚?其实没有想象的复杂...

    关于用多种语言抚养孩子的案例比比皆是,但并不是所有的父母都鼓励这样做,他们被告知这会导致孩子混乱和语言延迟,使他们错过机会之窗. 以下是最常见的案例,以及把孩子培养成双语者背后的真实故事. 误解一.与 ...

  4. Facebook 开源增强版 LASER,可使用90多种语言

    为了加速将自然语言处理(NLP)应用到更多的语言,Facebook 开源了增强版 LASER 库,成为第一个成功地与 NLP 社区分享的大型多语种句子表示工具.该工具目前可以使用90多种语言,涉及28 ...

  5. c常用算法程序集_10万赞的AI算法集:含python,java,C,C++多种语言

    先声明这篇文章的基础来自网络,问题是,文章只说有这么一个githab账号,没有给地址,我也是搜了半天才找到,发现这个账号下有很多种语言的算法实现,直接上图: 上面有地址,不能加链接,抱歉 所有算法都在 ...

  6. 在word中如何设置翻译功能?原来word还能翻译多种语言!

    在工作中我们经常要接触到word文件,当我们需要翻译word文件时,却不知道如何下手了!其实在word中是有翻译功能的,并且可以翻译多种语言.有需要的小伙伴可以跟着小编学习一下的啊! No.1在哪里设 ...

  7. GitHub开源:支持100多种语言的OCR文字识别

    之前为给位朋友分享过:GitHub开源:17M超轻量级中文OCR模型.支持NCNN推理,该项目仅仅支持中文OCR识别,本篇博文将分享支持100多种语言的OCR文字识别项目:Tesseract OCR. ...

  8. 【日常分享】多邻国v4.93.4,在线学习英语、日语、韩语、德语…等30多种语言

    多邻国v4.93.4,在线学习英语.日语.韩语.德语-等30多种语言. 国外的一个大佬破解的,所有功能已全部免费. 下载: https://wws.lanzous.com/iX5l3k8ajgd 密码 ...

  9. python实现:命令行翻译.string 和 .xml 文件 -- mkTranslate:支持多种语言的互译

    [github传送门] 功能 翻译文本文件 翻译.strings文件 翻译.xml文件 翻译 文本 支持谷歌翻译 支持有道翻译 支持 i18ns.com 聚合翻译 会自动检测当前网络情况,从而决定使用 ...

最新文章

  1. Understand分析Kinect SDK 1.7自带例子(C++)图集二
  2. linux下升级python2.0到python3.0
  3. 具体knn算法概念参考knn代码python实现
  4. 这6种编码方法,你掌握了几个?
  5. 《老马的职业“鬼”话》 马华兴著
  6. 二叉树的概念和基本术语
  7. C++ OpenCV 学习笔记【1】-安装环境搭建+基础文件资源链接
  8. vue-router页面传值及接收值
  9. linux 刷新网络配置,3 Linux 网络配置
  10. html和jQuery实现一个开心小农场游戏
  11. python异常处理时所使用的保留字_【2020年12月计算机二级Python语言考试冲刺题(二)】- 环球网校...
  12. VRF抽签与投票的思考
  13. IDEA中修改html页面后在浏览器不生效的解决方法
  14. 关于Android短信拦截
  15. html手机qq登陆验证码,为什么qq登陆需要验证码?qq登陆需要验证码怎么取消?...
  16. iOS开发-集成阿里云实人认证
  17. 计算机二级字符串,计算机二级辅导:VC字符串转换
  18. NVR和DVR的详细区别
  19. 洛谷P2404 Java解法
  20. vue+canvas 小球连线——碰壁折返

热门文章

  1. QQ集体被盗号,猝不及防的大型社死名场面
  2. SYSTEMTIME相关
  3. Ubuntu 添加自动切换壁纸
  4. php怎样随机设置颜色,php简单生成随机颜色的方法
  5. Android系统恢复出厂设置方法-涵盖5.1 6.0 7.0 7.1 8.0 9.0
  6. 零基础制作自动导航机器人
  7. Android 自定义view 高仿小米闹钟
  8. 警惕,这些病都与心情有关
  9. 使用rpmbuild打包php
  10. java+mysq基于SSM的酒店管理系统#毕业设计