Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 420|回复: 0

[网络编程学习]Java通过mac地址远程唤醒开机

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-11-3 00:01:56 | 显示全部楼层 |阅读模式
    1. 关机的,大家都会……想比我就不说了吧!
    2. 通过IP,使用shutdown 命令,外加参数……附上地址,OK。
    3. Java通过mac远程唤醒,开机代码:
    4. import java.net.DatagramPacket;
    5. import java.net.DatagramSocket;
    6. import java.net.InetAddress;
    7. import java.net.SocketException;
    8.          
    9.   public class TestOpenOS{
    10.      private int port = 10000;
    11.       private String mac = "00-50-04-1D-A2-B4";
    12.       private String ipAddress = "255.255.255.255";
    13.          
    14.       public TestOpenOS(){
    15.           // TODO Auto-generated constructor stub
    16.       }
    17.              
    18.       private void setMac(String mac)
    19.       {
    20.           this.mac = mac;
    21.       }
    22.              
    23.      public TestOpenOS(int port, String mac, String ipAddress){
    24.         this.port = port;
    25.         this.mac = mac;
    26.         this.ipAddress = ipAddress;
    27.     }
    28.          
    29.     public void sendOpenOS()
    30.     {
    31.        InetAddress destHost = null;
    32.        DatagramSocket ds = null;
    33.        try
    34.       {
    35.           destHost = InetAddress.getByName(ipAddress);
    36.           byte[] destMac = getMacBytes(mac);
    37.          byte[] magicBytes = new byte[102];
    38.            // 将数据包的前六位放入0xFF即“FF”的二进制
    39.            // 发一个BroadCast包,包的内容包括以下数据就可以了。
    40.             // FF FF FF FF FF FF,6个FF是数据的开始,
    41.            // 紧跟着16次MAC地址就可以了。
    42.            for (int i = 0; i < 16; i++)
    43.            {
    44.               for (int j = 0; j < destMac.length; j++)
    45.               {
    46.                   magicBytes[6 + destMac.length * i + j] = destMac[j];
    47.                   magicBytes[j] = (byte) 0xFF;
    48.               }
    49.            }

    50.             // --------------------查看数据报发出的数据---------------------
    51.             for (int i = 1; i <= 102; i++)
    52.             {
    53.                 if (((i - 1) % 6) == 0)
    54.                 {
    55.                     System.out.println();
    56.                 }
    57.                 System.out.print(magicBytes[i - 1] + "===");
    58.             }   
    59.             
    60.             DatagramPacket dp = null;
    61.             try
    62.             {
    63.                 dp = new DatagramPacket(magicBytes, magicBytes.length, destHost, port);
    64.                 ds = new DatagramSocket();
    65.                 ds.send(dp);
    66.             }
    67.             catch (Exception e)
    68.             {
    69.                 // TODO: handle exception
    70.                 e.printStackTrace();
    71.            }
    72.         }
    73.         catch (Exception e)
    74.         {
    75.             // TODO: handle exception
    76.             e.printStackTrace();
    77.         }
    78.         finally
    79.        {
    80.             if (null != ds)
    81.             {
    82.                 //关闭数据报流
    83.                 ds.close();
    84.             }
    85.         }
    86.     }

    87.     // 远程关机
    88.     public void sendCloseOS()
    89.     {

    90.    }
    91.      
    92.    /**
    93.      *  将16进制的mac地址转换为二进制
    94.      * @param macStr
    95.      * @return
    96.      * @throws IllegalArgumentException
    97.      */
    98.     private static byte[] getMacBytes(String macStr) throws IllegalArgumentException
    99.     {
    100.         byte[] bytes = new byte[6];
    101.         String[] hex = macStr.split("(\:|\-)");
    102.         if (hex.length != 6)
    103.         {
    104.             throw new IllegalArgumentException("mac 地址有问题,你看看对不对?Invalid MAC address.");
    105.         }
    106.         try
    107.         {
    108.             for (int i = 0; i < 6; i++)
    109.             {
    110.                bytes[i] = (byte) Integer.parseInt(hex[i], 16);
    111.             }
    112.         }
    113.         catch (NumberFormatException e)
    114.        {
    115.             throw new IllegalArgumentException("Invalid hex digit in MAC address.");
    116.        }
    117.         return bytes;
    118.     }

    119.    public static void main(String[] args)
    120.     {
    121.         TestOpenOS w = new TestOpenOS();
    122.         w.sendOpenOS();
    123.          
    124.         w.setMac("f0-4d-a2-62-aa-ba");
    125.         w.sendOpenOS();
    126.     }
    127. }
    复制代码


       
         
         
          
          

            
          

            
          
         
       

      


    源码下载:http://file.javaxxz.com/2014/11/3/000156390.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2026-6-19 10:09 , Processed in 0.404426 second(s), 34 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表