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

功能要求:通过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的状态下,而是出于某种不会接收魔术包唤醒的“休眠”态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559042.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FFmpeg在Ubuntu的安装以及教程~~~

FFmpeg在Ubuntu的安装以及教程~~~一、安装 可通过PPA进行安装sudo add-apt-repository ppa:kirillshkrogalev/ffmpeg-next sudo apt-get update sudo apt-get install ffmpeg 查看是否安装成功&#xff1a; ffmpeg -version二、相关概念比特率比特率&#xff0c;是一个决定音视…

Java学习指导————如何做到基础扎实

原文出处&#xff1a;《一篇文章教会你&#xff0c;如何做到招聘要求中的“要有扎实的Java基础”》 引言 不少同学总会产生这样的疑问&#xff1a; “请问&#xff0c;如何才叫基础扎实&#xff1f;” 答案是&#xff1a;“玩好JDK&#xff01;” JDK学习内容主要包含三部分…

奥特曼系列ol服务器名称带怪兽,《奥特曼系列ol》怪兽图鉴 怪兽阵容

《奥特曼系列ol》这款游戏中的怪兽图鉴也是很多玩家非常关注的问题之一哦&#xff0c;随着游戏的不断的更新&#xff0c;游戏也是加入了不少全新的玩法&#xff0c;一定让很多玩家觉得有些迷惑吧。下面小编为大家带来《奥特曼系列ol》怪兽图鉴以及怪兽阵容&#xff0c;希望大家…

继上一篇博客--javaweb通过接口来实现多个文件压缩和下载(包括单文件下载,多文件批量下载)

通过动态分配地址来提升javaweb文件下载接口的其兼容性和可扩展性&#xff1a; &#xff08;上篇博文地址&#xff1a;https://blog.csdn.net/weixin_37766296/article/details/80044000&#xff09;log4j.properties 文件&#xff1a; log4j.rootLogger debug,stdout,D,Elog4…

服务器主机启动不显示,服务器主机不启动怎么回事

服务器主机不启动怎么回事 内容精选换一换本文介绍了主机迁移服务SMS各特性版本的功能发布和对应的文档动态&#xff0c;新特性将在各个区域(Region)陆续发布&#xff0c;欢迎体验。源端服务器数据收集声明。源端服务器上安装和配置完迁移Agent后&#xff0c;迁移Agent会把源端…

Swagger自动接口文档生成框架————springboot整合swagger总结

swagger简介&#xff1a; swagger是一款开源的api接口文档生成工具。 Swagger的项目主页&#xff1a;https://swagger.io/ 目前比较流行的做法是在代码中加入swagger相关的注释&#xff0c;然后&#xff0c;利用小工具生成swagger.json或者swagger.yaml文件。 springboot…

申请 Let's Encrypt 数字证书,并安装cerbot快速上手教程~~

申请 Lets Encrypt 数字证书&#xff0c;并安装cerbot快速上手教程~~Let‘s Encrypt SSL证书介绍如今&#xff0c;越来越多的网站已经由HTTP迁移到HTTPS安全协议了。HTTPS不但能够避免网站内容在传输过程中被恶意篡改&#xff0c;切实保护访问者的权益&#xff0c;还能够让搜索…

Java常用设计模式————单例模式

单例模式简介 90%以上的设计模式都或多或少的应用了接口和抽象类&#xff0c;而单例比较特殊&#xff0c;并没有接口的应用。 单例Singleton指仅仅被实例化一次的类。通常被用来代表那些本质上唯一的系统组件。————《Effective Java》 数据库连接获取类的对象可以是单例的…

最简明扼要的 Systemd 教程,只需十分钟

systemctl常用命令介绍~~~Systemctl是一个systemd工具&#xff0c;主要负责控制systemd系统和服务管理器。 Systemd是一个系统管理守护进程、工具和库的集合&#xff0c;用于取代System V初始进程。Systemd的功能是用于集中管理和配置类UNIX系统。启动及服务大多数主流发行版要…

Java常用设计模式————工厂模式

简介&#xff1a; 工厂模式&#xff08;Factory Pattern&#xff09;是Java中最常用的设计模式之一&#xff0c;又称多态工厂模式、虚拟构造器模式。属于创建型模式。 在工厂模式中&#xff0c;我们在创建对象时不会对客户端暴露创建逻辑&#xff0c;并且是通过使用一个共同的…

JavaScript新手入门教程大全~~~

JavaScript新手入门教程大全~~~一。 js教程介绍&#xff1a;JavaScript是一种运行在浏览器中的解释型的编程语言。 那么问题来了&#xff0c;为什么我们要学JavaScript&#xff1f;因为你没有选择。在Web世界里&#xff0c;只有JavaScript能跨平台、跨浏览器驱动网页&#xff0…

Java常用设计模式————抽象工厂模式

简介 每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。 与工厂方法模式的区别 工厂方法模式针对的是一个产品等级结构&#xff0c;而抽象工厂模式针对的是多个产品等级结构&#xff0c;因此抽象工厂模式在结构上要比工厂方法模式更加复杂和抽象&#xff0c;也更…

CSS新手入门教程~~~~

CSS新手入门教程~~~~CSS简介&#xff1a;什么是 CSS? CSS 指层叠样式表 (Cascading Style Sheets)样式定义如何显示 HTML 元素样式通常存储在样式表中把样式添加到 HTML 4.0 中&#xff0c;是为了解决内容与表现分离的问题外部样式表可以极大提高工作效率外部样式表通常存储在…

Docker必备知识整理

Docker简介 Docker是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何流行的Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间不会有任何接口。 Docker是用Go语言…

Exception和Error深入分析~~~

Exception和Error深入分析~~~Exception 和 Error 都是继承了 Throwable 类&#xff0c;在 Java 中只有 Throwable 类型的实例才可以被抛出&#xff08;throw&#xff09;或者捕获&#xff08;catch&#xff09;&#xff0c;它是异常处理机制的基本组成类型。 Exception 和 Erro…

Java常用设计模式————原型模式(一)

介绍 原型模式&#xff08;Prototype Pattern&#xff09;&#xff1a;用原型实例指定创建对象的种类&#xff0c;并通过拷贝这些原型创建新的对象。 原型模式用于创建重复的对象&#xff0c;同时又能保证性能。当直接创建对象的代价比较大时&#xff0c;则采用这种模式。&…

解决eclipse刚启动卡死的问题~~~亲测有效~~

解决eclipse刚启动卡死的问题~~~亲测有效~~ 重启了eclipse三次&#xff0c;还是卡死了。最后找到一下方法&#xff1a; 建议大家在删除先备份一下文件&#xff0c;以免丢失项目&#xff01; 关于 eclipse启动卡死的问题&#xff08;eclipse上一次没有正确关闭&#xff0c;导致…

Java常用设计模式————原型模式(二)之深拷贝与浅拷贝

引言 clone顾名思义就是复制&#xff0c; 在Java语言中&#xff0c; clone方法被对象调用&#xff0c;所以会复制对象。所谓的复制对象&#xff0c;首先要分配一个和源对象同样大小的空间&#xff0c;在这个空间中创建一个新的对象。那么在java语言中&#xff0c;有几种方式可…

Java控制台输入教程~~~~

Java控制台输入教程~~~~当通过new Scanner&#xff08;System.in&#xff09;创建一个Scanner&#xff0c;控制台会一直等待输入&#xff0c;直到敲回车键结束&#xff0c;把所有输入的内容传给Scanner&#xff0c;作为扫描对象。如果要获取输入的内容&#xff0c;则只需要调用…

Java面试宝典————基础篇

参考原文&#xff1a;《Java面试题全集&#xff08;上&#xff09;》 1.Java中的基本数据类型有哪些&#xff1f; 类型&#xff1a;byte short int long float double boolean char 字节&#xff1a;1 2 4 8 4 8 1 2 2.面向…