功能要求:通过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遍重复目标mac

for (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的状态下,而是出于某种不会接收魔术包唤醒的“休眠”态。

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

  1. Java网络编程————UDP实现ThinkPad S5网络唤醒

    功能要求:通过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. 区块链简史:解读这场技术革命的前世今生
  2. 几个进程管理的命令:pkill,pidof,kill,killall,job
  3. JVM性能调优监控工具jps、jstack、jmap、jhat、jstat、hprof使用详解 | 必须收藏!
  4. Axure 部件的交互样式
  5. Linux 内核开发 - Eclipse内核开发环境搭建
  6. Failed to bind NettyServer on /192.168.**.*:20880, cause: Failed to bind to: /0.0.0.0:20880
  7. Redis高可用方案-哨兵模式-SpringBoot整合
  8. PHP 获取页面地址参数详解整理
  9. 杭电4554 叛逆的小明
  10. 学python数据分析心得体会800字_学习 Python 数据分析的正确姿势
  11. matlab菲涅尔衍射光强分布,矩孔菲涅耳衍射的光强分布.pdf
  12. MySQL重复数据排序_排序数据以在MySQL中重复记录
  13. P5200 Sleepy Cow Sorting(树状数组,模拟)
  14. VUE解决路由里的参数改变页面却没有跳转的问题
  15. ps4实况2016服务器维护,实况足球2016 PS4联机延时的解决办法
  16. 语音合成——闽南语合成(1)
  17. 知识付费对接微信公众号订阅消息
  18. Python实战:淘宝自动抢购
  19. svn没有绿色的对勾处理
  20. 关于“联想”笔记本“无线网功能关闭”的问题的解决方案

热门文章

  1. facebook bigpipe
  2. 记录mars3d的使用 - geojson图层
  3. 当没有成熟案例可参考时,企业该如何实现数字化转型?
  4. 九头蛇(Hydra)安装与使用
  5. Python进阶干货:[中文编码乱码]:案例及解决方法
  6. Windows10微信多开:电脑上同时打开多个微信
  7. SpringMVC——处理器方法的返回值类型
  8. UGUI粒子遮罩(UI Mask 遮挡粒子)
  9. arguments的解释
  10. docker debian_使用Docker构建Debian软件包