日期:2014-05-20  浏览次数:20673 次

java中使用WOL进行机器唤醒,为何没效果
我先说明下我的需求:
   使用java语言实现某台机器的启动功能,我查看了下网上的资料,都说用WOL,我也采用了网上很多人说自己实践过是可以的程序,但是我的就是没效果。
我的测试流程,两台同局域网中的笔记本,一个ip是104,一个是108.我在108上调用程序,想去唤醒104机器。运行程序之后104并没有被唤醒。MAC地址都是对应的,唯一我不太确定的是我的port,我不知道用多少。
以下是我的代码实现过程:
@Test
public void startMachine(){
try {
String ip = "192.168.0.104"  , macAddr = "BC-77-37-D8-DA-B0" ;
int port = 7 ;

byte[] macByte = new byte[6];
String[] ips = macAddr.split("\\:|\\-");

for (int i = 0; i < 6; i++) {
System.out.println(ips[i]);
macByte[i] = (byte)Integer.parseInt(ips[i],16);
System.out.println(macByte[i]);
}
//用来存储网络唤醒数据包
byte[] bys = new byte[6+16*macByte.length];
for (int i = 0; i < 6 ; i++) {
bys[i] = (byte)0xff;
}

for (int i = 6; i < bys.length; i+= macByte.length) {
System.arraycopy(macByte, 0, bys, i, macByte.length);
}

//将字符形式的IP地址转换成标准的IP地址
InetAddress address = InetAddress.getByName(ip);
//生成标准的数据报
DatagramPacket pack = new DatagramPacket(bys, bys.length,address,port);
//创建标准套接字,用来发送数据报
DatagramSocket socket = new DatagramSocket();
socket.send(pack);
socket.close();
System.out.println("send is end ! ");

} catch (Exception e) {
e.printStackTrace();
} catch (Throwable e) {
e.printStackTrace();
}

}

请各位大牛帮忙指导,在线等答复。
java?WOL?唤醒无 java?WOL?唤醒无效果

------解决方案--------------------
我遇到过一次,不过解决了;
想要达到WOL唤醒的效果,大概需要有以下几点的保证:
1、服务器软硬件都需要支持WOL功能;
2、只能在服务器休眠状态下实现;
3、必须连通电源。