Java实现远程主机唤醒 (WOL)
1 远程唤醒原理
主板需要支持并打开Wake on LAN功能。开启此选项后,关机状态,网卡也会被供电(当然就更耗电一点点),这样网卡就能处理网络上发来的数据包。 如果收到特定格式的数据包,则向主板发送开机信号。
2 发送什么样的数据包
首先需要发一个UDP数据包,另外数据包中的数据满足如下格式:
【六个字节的0xff】 【重复16次的需要唤醒的主机的MAC地址】
共有6+16*6 = 17*6 个字节。
3 干吧
3.1 BIOS设置
首先要进入电脑的BIOS设置,打开Wake on LAN选项
3.2 写代码,发包。
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.MulticastSocket;
import java.net.UnknownHostException;public class WakeOnLan {public static void main(String[] args) {String mac = "11-22-33-44-55-66";wakeup(mac);}private static void wakeup(String mac) {System.out.println("try wake "+mac);mac=mac.replace("-", "");if(mac.length() != 12){System.out.println("mac len error :" +mac.length());return;}String ip = "255.255.255.255";//广播IP地址int port = 9;//端口号//魔术包数据StringBuffer sBuffer =new StringBuffer();sBuffer.append("FFFFFFFFFFFF");for(int i=0;i<16;i++){sBuffer.append(mac);}byte[] command = hexToBinary(sBuffer.toString());try {InetAddress address = InetAddress.getByName(ip);//MulticastSocket socket = new MulticastSocket(port);DatagramSocket socket = new DatagramSocket(port);DatagramPacket packet = new DatagramPacket(command, command.length, address, port);socket.send(packet);socket.close();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}/*** 将16进制字符串转换为用byte数组表示的二进制形式* @param hexString:16进制字符串* @return:用byte数组表示的十六进制数*/private static byte[] hexToBinary(String hexString){hexString = hexString.toUpperCase().replace("0X", "");byte[] result = new byte[hexString.length()/2];for(int i = 0; i < hexString.length()/2; i ++){result[i] = (byte)((hexToDec(hexString.charAt(i+i))<<4)|(hexToDec(hexString.charAt(i+i+1))));}return result;}private static byte hexToDec(char c){c = Character.toUpperCase(c);return (byte)(c<'A'? (c-'0'):(c-'A'+10));}
}
Java实现远程主机唤醒 (WOL)相关推荐
- 局域网linux唤醒windows,局域网唤醒 (WOL - Wake on LAN) | 远程启动计算机- ManageEngine OpUtils...
局域网唤醒(WoL) - 远程启动计算机 什么是局域网唤醒? 局域网唤醒(WoL)是一个远程启动或关闭设备的工具, 需要使用一个特别设计的框架,其中包含目标计算机的MAC地址, 可以连接到网络的设备来 ...
- java判断是否能上网_用Java检测远程主机是否能被连接
用Java检测远程主机是否能被连接 有人推荐使用java的Runtime.exec()方法来直接调用系统的Ping命令.也有人完成了纯Java实现Ping的程序,使用的是Java的NIO包(nativ ...
- java线程阻塞唤醒的四种方式
java在多线程情况下,经常会使用到线程的阻塞与唤醒,这里就为大家简单介绍一下以下几种阻塞/唤醒方式与区别,不做详细的介绍与代码分析 suspend与resume Java废弃 suspend() 去 ...
- java队列等待唤醒_Java深入学习29:线程等待和唤醒的两个方案
Java深入学习29:线程等待和唤醒的两个方案 模拟场景 一个门店,有一个店员,有消费者来消费商品(每次消费1件商品),有仓库人员来添加(生产)商品(每次生产1件商品),并假设库存上限是2. 基础代码 ...
- Java线程等待唤醒机制(加深理解)
今天看源码的时候遇到这样一个场景,某线程里面的逻辑需要等待异步处理结果返回后才能继续执行.或者说想要把一个异步的操作封装成一个同步的过程.这里就用到了线程等待唤醒机制,下面具体看一下. 等待唤醒机制示 ...
- 基于Java实现计算机远程唤醒(WOL)功能
网络唤醒,即WOL.简单来讲就是电脑在关闭状态,可以通过网络发送特殊数据包给网卡,网卡收到指定包后,开启计算机.WOL要求有硬件支持该功能,目前市场上主流的以太网卡都支持WOL功能,而无线网卡查找了许 ...
- java重新执行_(转载)java线程 - 线程唤醒后并被执行时,是在上次阻塞的代码行重新往下执行,而不是从头开始执行...
今天重新把昨晚的线程同步面试题做一遍时,发现实际情况运行下来时,线程一直不同步.后来经过不断测试,发现自己的一个误区. 之前一直以为,线程如果被唤醒后再次执行时,会从头开始运行这个线程,也就是重新运行 ...
- 相关疑惑解决,java线程虚假唤醒等等问题
1. System.out.println方法是线程安全的 之前一直疑惑为啥下面案例中的主线程中num = 1会对线程A可见,注意没有加volatile修饰 class Test1{//public ...
- java 等待唤醒机制,Java线程等待唤醒机制
记录面试过程中被问到的几个需要手写代码的小案例 1.请手写出线程的等待唤醒机制 案例中两个线程:SyncSetThread设置学生信息,SyncGetThread用来获取学生信息,在Student实体 ...
最新文章
- 使用Blender Houdini轻松学习FX特效
- RedHat5下scrumworks pro 5.0安装详细说明
- 文件管理系统_我的文件管理系统
- [OS复习]存储管理2
- oracle数据本机自动备份
- php+对象+toarray_PHP 对象、数组间的转换
- linux lvm 系统快照,系统运维|在 LVM中 录制逻辑卷快照并恢复(第三部分)
- v210 启动脚本分析
- Xamarin Android Webview中JS调用App中的C#方法
- 【随机过程】马尔可夫链(2)
- 使用gson解决java对象循环引用问题
- 陀螺仪指向的是什么方向
- Mac远程连接Linux桌面教程
- python视频车流量计数_【使用攻略】【图像识别】车流量统计(动态版)
- 瞻博网络Contrail多云解决方案荣获最佳创新解决方案奖
- aardio - MsSql数据库+虚表示例
- IE打不开了,该怎么办?
- 传感器系列之4.12GPS定位传感器
- 北京,探索「宜居」的技术路径
- 天津计算机专业,天津的大学计算机专业排名