第一步
- 在服务器上配置jre环境。
- 去oracle官网下载jre ,然后在环境变量里添加jre路径。
第二步
- 我使用的是PHPStudy集成环境
- 注册apache 和 mysql服务
#切换到相对应的目录
#apache
apache httpd -k install -n "服务名"
#mysql
mysqld --install 服务名- 写一个启动服务start .cmd
cd /d C:\phpStudy\PHPTutorial\Apache\bin
net start apache
cd /d C:\phpstudy\PHPTutorial\MySQL\bin
net start mysql- 需要写一个重启电脑的closeSystem.cmd
shutdown -r -t 1
第三步
- 把start.cmd放到注册表的启动项中实现开机启动
- cmd输入以下命令 /v 后面是注册名 随意 路径改成相应的
#注册服务启动项
reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v add /d C:\regRun\start.cmd /f
第四步
获取服务器信息类
package com.boolib.service;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.text.DecimalFormat;
import java.util.Properties;
public class MySystemInfo {
private String osName;
private String osArch;
private String osVersion;
private String address;
private int totalMemoryJVM;
private int idleMemoryJVM;
private int totalMemory;
private int maxMemory;
private int idleMemory;
private String use;
InetAddress address1;
Properties pro;
String info;
public MySystemInfo() {
try {
pro = System.getProperties();
address1 = InetAddress.getLocalHost();
this.osName = pro.getProperty("os.name");
this.osArch = pro.getProperty("os.arch");
this.osVersion = pro.getProperty("os.version");
this.address = address1.getLocalHost().toString();
this.totalMemoryJVM = (int)Runtime.getRuntime().totalMemory()/1024;
this.maxMemory = (int)Runtime.getRuntime().maxMemory()/1024;
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int getIdleMemoryJVM() {
return idleMemoryJVM;
}
public void setIdleMemoryJVM(int idleMemoryJVM) {
this.idleMemoryJVM = idleMemoryJVM;
}
public String getUse() {
return use;
}
public void setUse(String use) {
this.use = use;
}
//获取服务器信息
public MySystemInfo getInfo() {
setIdleMemoryJVM( (int)Runtime.getRuntime().freeMemory()/1024);
float d = (1-(float)this.idleMemoryJVM / (float)this.totalMemoryJVM)*100;
DecimalFormat decimalFormat=new DecimalFormat(".00");
use=decimalFormat.format(d)+"%";
return this;
}
@Override
public String toString() {
return "服务器名称=" + osName + ", 服务器架构=" + osArch + ", 服务器版本号=" + osVersion + ", IP地址="
+ address.substring(address.lastIndexOf('/')+1) + ", JVM空闲内存=" + idleMemoryJVM + ", JVM总内存=" + totalMemoryJVM
+", 使用率"+use+"\n"
;
}
}
信息输出线程类
package com.boolib.service;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.net.ServerSocket;
import java.net.Socket;
public class WriteSocket extends Thread{
ServerSocket ssocket;
Socket socket;
BufferedReader reader;
BufferedWriter writer;
final int PORT=65530;
MySystemInfo mInfo ;
String flag;
public WriteSocket() {
try {
this.ssocket = new ServerSocket(PORT);
this.mInfo= new MySystemInfo();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
try {
this.socket = ssocket.accept();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
while(true) {
try {
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
writer.write(mInfo.getInfo().toString());
writer.flush();
Thread.sleep(5000);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}}
}
}
信息接收线程类
package com.boolib.service;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class ReadSocket extends Thread {
BufferedReader reader;
String flag;
Socket socket;
ServerSocket ssocket;
final String cmd="C:\\closeSystem.cmd.lnk";
public ReadSocket() {
try {
this.ssocket = new ServerSocket(65531);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
try {
socket= ssocket.accept();
int i = 0 ;
while(true)
{
i++;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream())) ;
System.out.println("当前第"+i+"次接收");
if((flag=reader.readLine())!=null) {
if(flag.equals("shutdown"))
{
ProcessBuilder pb = new ProcessBuilder("cmd","/c",cmd);
Process process = pb.start();
//Runtime.getRuntime().exec("C:\\Users\\xu\\Desktop\\stop.cmd.lnk");
System.out.println("命中红心");
break;
}
}
Thread.sleep(500);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}这里我设置的服务器监听端口是tcp :65530,65531,需要在服务器上安全组上配置
启动类
package com.boolib.service;
public class Start {
public static void main(String[] args) {
new ReadSocket().start();
new WriteSocket().start();
}
}
生成jar包,传送至服务器。写启动项
#注册监听项reg add HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run /v socket /d C:\regRun\utils\socketjar.cmd /f
测试 可以用telnet ip 端口号 获取writer
服务器设置成自动登录
搜索 :control userpasswords2;
测试自动重启类
package com.boolib.test;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.net.Socket;
public class test {
public static void main(String[] args) {
String path = "你的域名或者ip";
try {
Socket so =new Socket(path, 65531);
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(so.getOutputStream()));
bw.write("shutdown");
bw.write("\n");
bw.flush();
so.shutdownOutput();//此处必须写
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}