功能要求:通过Java程序实现ThinkPad S5 笔记本网络唤醒

必备知识

一、定义:网络唤醒,通过局域网、互联网或通讯网络,以有线网卡的形式,向目标电脑发送魔法包(Magic Packet),让电脑自动开机。该技术目前被大多数主板和网卡所支持。

二、远程唤醒必备条件:  远程唤醒只能依赖于主机硬件实现。

1.主板支持,能够在关机时为网卡供电,2002年以后的大部分主板都支持该功能。

2.主板设置:各种类型电脑有所区别,但基本上都是在BIOS中设置Power Management Setup,中Wake Up On Lan为Enable,各个机型意思大同小异。

3.网卡设置:打开网卡的远程唤醒功能步骤如下:我的电脑—>管理—>设备管理器—>网络适配器—>以太网卡—>属性—>高级—>“魔术封包唤醒”—>开启(Enable),—>电源管理—>一直勾选到"只允许幻数据包唤醒计算机"—>确定。完成!

4.远程唤醒目标主机必须连接电源。笔记本必须插继电器。

5.目标主机上一次必须正常关机。

6.发送开机命令的主机必须能够与目标主机建立通讯:如果发送广播魔术包,那么只要保证广播包能够到达目标主机即可;如果发送的是定向包则需要局域网路由器的支持,需要在路由其中配置一个到目标主机的路由信息。

三、魔术包的组成

魔术包的组成非常固定,由6对“FF”组成前缀,其余为重复16次的MAC地址组成。例如:试验机的MAC为:“28-D2-44-35-68-A7”,那么魔术包为:

“0xFFFFFFFFFFFF28D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A728D2443568A7”

windows系统中通过cmd中ipconfig -all来查看Mac地址,注意,是以太网卡,这里的网卡名称与上面网卡设置中的网卡名称是一致的。

Java代码

/*** 通过指定目标主机Mac唤醒网卡所属主机* * @author mht* @param objectMac* @since 2018.2.7 西安浮雕墙项目亲测:)*/public static void wakeYourPC(char[] objectMac) {char[] head = { 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF };char[] cmd = new char[102];// 拼接数据包System.arraycopy(head, 0, cmd, 0, head.length);// 需要16遍重复目标macfor (int i = 0; i < 16; i++) {System.arraycopy(objectMac, 0, cmd, 6 + i * 6, head.length);}final String cmdStr = new String(cmd);try {byte[] data = cmdStr.getBytes("ISO-8859-1");/* 在Java UDP中单播与广播的代码是相同的,要实现具有广播功能的程序只需要使用广播地址即可 */InetAddress inetAddr = InetAddress.getByName("255.255.255.255");int port = 7010;// 获取广播socket// MulticastSocket client = new MulticastSocket(port);DatagramSocket client = new DatagramSocket();// 封装数据包DatagramPacket packet = new DatagramPacket(data, data.length, inetAddr, port);// 发送魔法包for (int i = 0; i < 3; i++) {client.send(packet);Thread.sleep(100);}} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}}

OK,大功告成!

参考教程

《如何开启网卡的网络唤醒功能》来自联想知识库:点击打开链接

《使用Java Socket发送魔术包:实现电脑远程开机(WOL)》:点击打开链接

==================2018/3/1 更新================================================

除了上述被唤醒电脑的常规配置,主板以及网卡,有时候还是不能唤醒目标主机,咨询了一下英特尔产品支持,了解到一个重要的细节:勾选掉“启用快速启动”。

如图:

这是在win10和win8系统中存在的选项,在win7系统中并未找到此项。当勾选掉这一项后,再使用网络唤醒就可以成功了。

原因是,这一项勾选的话可能会导致部分机器在正常关机之后并不是出于shutdown的状态下,而是出于某种不会接收魔术包唤醒的“休眠”态。

Java网络编程————UDP实现ThinkPad S5网络唤醒相关推荐

  1. c 语言 网络唤醒,Java网络编程————UDP实现ThinkPad S5网络唤醒-Go语言中文社区...

    功能要求:通过Java程序实现ThinkPad S5 笔记本网络唤醒 必备知识: 一.定义:网络唤醒,通过局域网.互联网或通讯网络,以有线网卡的形式,向目标电脑发送魔法包(Magic Packet), ...

  2. Java网络编程UDP编程

    一. 简单先介绍一下网络编程 1. 概念 : 通过网络IP连接起来,实现网络通信,数据传输的操作,就是网络编程 2. 实现 : 目前来说当前主要有两种实现的方法,TCP和UDP: 其中TCP需要划分客 ...

  3. Java网络编程——UDP

    网络编程,UDP编程 网络编程 网络编程三要素 IP ipv4 ipv6 Java获取IP 端口 端口号 协议 UDP协议 TCP协议 UDP通信程序 发送步骤 接收步骤 单播 组播 广播 网络编程 ...

  4. 关于JAVA网络编程UDP和TCP(上)

    对于JAVA的网络编程我们又称之为socket编程.首先,网络编程,顾名思义,要涉及到网络,其中网络协议是必不可少的对于我们而言,一个重要的网络协议是大家要会的:TCP/IP协议,udp协议. 一.网 ...

  5. java网络编程 UDP通信协议实现局域网内文件的发送和接收

    要实现两台内网下的机子进行通信,首先得知道接收方的内网IP,获取IP的方式:可以打开任务管理器的以太网进行查看: 如下 也可以通过 win+r 输入cmd ,然后输入 ipconfig  回车  进行 ...

  6. java 网络编程 UDP TCP

    网络编程 网络编程主要用于解决计算机与计算机(手机.平板..)之间的数据传输问题. 网络编程: 不需要基于html页面就可以达到数据之间的传输. 比如: feiQ , QQ , 微信.... 网页编程 ...

  7. JAVA网络编程 -UDP篇(简单实现网络聊天)

    通过UDP实现网络聊天 多线程实现UDP网络聊天 1. 编写UDP发送线程UdpSendThread import java.io.BufferedReader; import java.io.IOE ...

  8. Java网络编程UDP协议--模拟英雄联盟游戏聊天骂人变*--优化网络环境从你我做起

    模拟英雄联盟聊天功能:实现客户端与服务器(一对一)的聊天功能,客户端首先发起聊天,输入的内容在服务器端和客户端显示,然后服务器端也可以输入信息,同样信息在客户端和服务端显示. 本案使用了正则表达式将接 ...

  9. [Java网络编程]UDP通信程序练习

    代码如下: package UdpPracticePack;import java.io.BufferedReader; import java.io.IOException; import java ...

最新文章

  1. C++模板之特化与偏特化详解
  2. 如何挖掘网站的核心关键词?
  3. 支付宝二维码可以抓包更改金额_好哒二维码6大功能,让你的生意“码”上火起来!会员、卡券、码上点餐...
  4. Linux中fork函数的作用及用法
  5. 30天敏捷结果(2):用三个故事驱动你的一周
  6. static方法不能直接访问类内的非static变量和不能调用this,super语句分析
  7. python实现线性回归预测不用sklearn库_python – 为什么我的自定义线性回归模型不匹配sklearn?...
  8. SpringBoot-动力节点-王鹤
  9. anki 新的卡片类型_用 Anki 建立高效复习错题体系
  10. 数据分类是否一定要求样本均衡
  11. Linux 文件夹压缩命令总结
  12. c语言中局部变量存放在哪里,C语言全局变量存放在哪里?
  13. 电脑监控软件都有哪些?
  14. 成考计算机专业难不难,成人高考计算机类难度大吗(成人大学难度)
  15. 前端开发神器VS Code安装教程
  16. Kotlin学习笔记
  17. GlusterFS基本概念
  18. 编码器-解码器(seq2seq)
  19. Redis怎么优雅删除key
  20. 7-13 旭旭的交友标准PTA

热门文章

  1. 调整灰度图像的大小,而无需在Python中使用任何内置函数
  2. 缓存通用管理类 + 缓存 HttpContext.Current.Cache 和 HttpRuntime.Cache 的区别
  3. android 切换字体崩溃,androidx - 在Android 10 / Android Q上使用捆绑的ttf字体时崩溃 - 堆栈内存溢出...
  4. linux 日记函数,每日记一些php函数,jQuery函数和linux命令(一)
  5. JavaScript实现数据分页
  6. c3p0连接池的配置和简单使用
  7. python matlibplot绘制矩阵_matplotlib.pyplot.matshow 矩阵可视化实例
  8. 怎么证明建立了存储过程_【Filecoin源码仓库全解析】第七章:了解PoRep与PoSt并参与复制证明游戏
  9. 结构体中vector自动为0_面试题:你是如何选择顺序存储数据结构的?
  10. java 数据库语句_java连接各数据库的语句