分享一个自各儿做的随时随地对内网的电脑进行开机、控制和关机的例子
分享一个自己做的随时随地对内网的电脑进行开机、控制和关机的例子
在公司,或在外地如何才能达到随时随地对宿舍的电脑(在局域网内,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++)
在公司,或在外地如何才能达到随时随地对宿舍的电脑(在局域网内,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++)