分享一个自各儿做的随时随地对内网的电脑进行开机、控制和关机的例子

分享一个自己做的随时随地对内网的电脑进行开机、控制和关机的例子
在公司,或在外地如何才能达到随时随地对宿舍的电脑(在局域网内,IP是192.168.*.*)进行开机、控制和关机呢?通过magic packet可以唤醒局域网的电脑,但是想在公司远程唤醒宿舍的电脑怎么办(不在同一局域网内)?我想到的一个方法是通过手机,让一台手机(先叫手机A)放在宿舍连着wifi,这时候手机和宿舍的那台手机就在同一个局域网了,在公司用手机B给手机A发送一条开机指令的信息,手机A收到信息后发送magic packet就可以唤醒宿舍的电脑了。这时候再通过teamviewer(设置为开机启动),就可以远程控制宿舍的电脑了,也可以通过teamviewer关机。这样就达到随时随地对宿舍的电脑进行开机、控制和关机的目的了。如果你换了新手机,旧手机放在宿舍也没用,不妨用来做这个,方便自己控制自己的电脑。下面是代码,经过在安卓4.2.1和4.0.4下测试可以达到上面所说的想法。
package com.example.testopenos;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.HttpURLConnection;
import java.net.InetAddress;
import java.net.URL;
import java.net.URLEncoder;
import java.text.SimpleDateFormat;
import java.util.Date;

import android.widget.*;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.telephony.SmsMessage;

public class SMSBroadcastReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Object[] pdus = (Object[]) intent.getExtras().get("pdus");
     for(Object p : pdus){
byte[] pdu = (byte[]) p;
SmsMessage message = SmsMessage.createFromPdu(pdu);
String senderNumber = message.getOriginatingAddress();
String content = message.getMessageBody();
Date date = new Date(message.getTimestampMillis());
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String receiveTime = format.format(date);
System.out.println(senderNumber+"||"+receiveTime+"||"+content);
if(senderNumber.equals("+8613100000000")&&content.equals("YCKJ"))//手机号码前加上+86,YCKJ是短信内容,即命令
{
    new Thread(new Runnable()
        {
         @Override
         public void run(){
             //magic packet
     OpenOS w = new OpenOS();
             w.setMac("00-1F-D0-C8-00-00");
             w.sendOpenOS();
     // abortBroadcast();
    
         }
        }).start();
}
}
}

public class OpenOS{
        private int port = 9;
         private String mac = "00-1F-D0-C8-00-00";
         private String ipAddress = "192.168.1.255";//如果你iP地址是192.168.1.*,这里就是192.168.1.255
     
         public OpenOS(){
         }
         
         private void setMac(String mac)
         {
            this.mac = mac;
         }
         
        public OpenOS(int port, String mac, String ipAddress){
           this.port = port;
           this.mac = mac;
           this.ipAddress = ipAddress;
       }
     
       public void sendOpenOS()
       {
           InetAddress destHost = null;
           DatagramSocket ds = null;
           try
           {
               destHost = InetAddress.getByName(ipAddress);
               byte[] destMac = getMacBytes(mac);
              byte[] magicBytes = new byte[102];
    
               for (int i = 0; i < 16; i++)
               {
                   for (int j = 0; j < destMac.length; j++)