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)相关推荐

  1. 局域网linux唤醒windows,局域网唤醒 (WOL - Wake on LAN) | 远程启动计算机- ManageEngine OpUtils...

    局域网唤醒(WoL) - 远程启动计算机 什么是局域网唤醒? 局域网唤醒(WoL)是一个远程启动或关闭设备的工具, 需要使用一个特别设计的框架,其中包含目标计算机的MAC地址, 可以连接到网络的设备来 ...

  2. java判断是否能上网_用Java检测远程主机是否能被连接

    用Java检测远程主机是否能被连接 有人推荐使用java的Runtime.exec()方法来直接调用系统的Ping命令.也有人完成了纯Java实现Ping的程序,使用的是Java的NIO包(nativ ...

  3. java线程阻塞唤醒的四种方式

    java在多线程情况下,经常会使用到线程的阻塞与唤醒,这里就为大家简单介绍一下以下几种阻塞/唤醒方式与区别,不做详细的介绍与代码分析 suspend与resume Java废弃 suspend() 去 ...

  4. java队列等待唤醒_Java深入学习29:线程等待和唤醒的两个方案

    Java深入学习29:线程等待和唤醒的两个方案 模拟场景 一个门店,有一个店员,有消费者来消费商品(每次消费1件商品),有仓库人员来添加(生产)商品(每次生产1件商品),并假设库存上限是2. 基础代码 ...

  5. Java线程等待唤醒机制(加深理解)

    今天看源码的时候遇到这样一个场景,某线程里面的逻辑需要等待异步处理结果返回后才能继续执行.或者说想要把一个异步的操作封装成一个同步的过程.这里就用到了线程等待唤醒机制,下面具体看一下. 等待唤醒机制示 ...

  6. 基于Java实现计算机远程唤醒(WOL)功能

    网络唤醒,即WOL.简单来讲就是电脑在关闭状态,可以通过网络发送特殊数据包给网卡,网卡收到指定包后,开启计算机.WOL要求有硬件支持该功能,目前市场上主流的以太网卡都支持WOL功能,而无线网卡查找了许 ...

  7. java重新执行_(转载)java线程 - 线程唤醒后并被执行时,是在上次阻塞的代码行重新往下执行,而不是从头开始执行...

    今天重新把昨晚的线程同步面试题做一遍时,发现实际情况运行下来时,线程一直不同步.后来经过不断测试,发现自己的一个误区. 之前一直以为,线程如果被唤醒后再次执行时,会从头开始运行这个线程,也就是重新运行 ...

  8. 相关疑惑解决,java线程虚假唤醒等等问题

    1. System.out.println方法是线程安全的 之前一直疑惑为啥下面案例中的主线程中num = 1会对线程A可见,注意没有加volatile修饰 class Test1{//public ...

  9. java 等待唤醒机制,Java线程等待唤醒机制

    记录面试过程中被问到的几个需要手写代码的小案例 1.请手写出线程的等待唤醒机制 案例中两个线程:SyncSetThread设置学生信息,SyncGetThread用来获取学生信息,在Student实体 ...

最新文章

  1. 使用Blender Houdini轻松学习FX特效
  2. RedHat5下scrumworks pro 5.0安装详细说明
  3. 文件管理系统_我的文件管理系统
  4. [OS复习]存储管理2
  5. oracle数据本机自动备份
  6. php+对象+toarray_PHP 对象、数组间的转换
  7. linux lvm 系统快照,系统运维|在 LVM中 录制逻辑卷快照并恢复(第三部分)
  8. v210 启动脚本分析
  9. Xamarin Android Webview中JS调用App中的C#方法
  10. 【随机过程】马尔可夫链(2)
  11. 使用gson解决java对象循环引用问题
  12. 陀螺仪指向的是什么方向
  13. Mac远程连接Linux桌面教程
  14. python视频车流量计数_【使用攻略】【图像识别】车流量统计(动态版)
  15. 瞻博网络Contrail多云解决方案荣获最佳创新解决方案奖
  16. aardio - MsSql数据库+虚表示例
  17. IE打不开了,该怎么办?
  18. 传感器系列之4.12GPS定位传感器
  19. 北京,探索「宜居」的技术路径
  20. 天津计算机专业,天津的大学计算机专业排名

热门文章

  1. 计算机找不到wlan,Win10网络设置找不到wlan选项怎么办
  2. 软嵌171 王学晨 作业二 时事评论
  3. Android OpenGL ES 画出三棱锥
  4. 使用循环完成剪刀石头布游戏
  5. HAC集群添加新节点
  6. cron表达式 每隔55分钟_如何用crontab每5分钟执行一次
  7. canal学习2--canal Adapter使用
  8. 关于解决爬取拉勾全网遇到的302重定向问题的一些记录
  9. PAT甲级刷题笔记(4)
  10. 国内版firefox启用pocket