java远程关机_java远程开关机

2023-10-31

packagetestFrame;importjava.awt.Color;importjava.awt.Font;importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.WindowAdapter;importjava.awt.event.WindowEvent;importjava.io.BufferedReader;importjava.io.DataInputStream;importjava.io.DataOutputStream;importjava.io.File;importjava.io.FileNotFoundException;importjava.io.FileOutputStream;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.PrintWriter;importjava.net.ServerSocket;importjava.net.Socket;importjava.text.SimpleDateFormat;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;importjava.util.Scanner;importjava.util.Timer;importjavax.swing.BorderFactory;importjavax.swing.JButton;importjavax.swing.JFrame;importjavax.swing.JLabel;importjavax.swing.JOptionPane;importjavax.swing.JPanel;importjavax.swing.JScrollPane;importjavax.swing.JTextArea;//服务器

public class testMain extendsJFrame{private static final long serialVersionUID = 1L;private static String logAddr = "";private static String logImageAddr = "";private static SimpleDateFormat sdfymd = new SimpleDateFormat("yyyy-MM-dd");private static SimpleDateFormat sdfymdhm = new SimpleDateFormat("yyyy-MM-dd HH:mm");private static SimpleDateFormat sdfymdhms = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");private static String curLogAddr = "";final String LOOPBACK_ADDRESS = "127.0.0.1";private staticDataOutputStream out;private staticDataInputStream in;private staticSocket CurSocket;private staticString ServiceIp;private staticInteger ServicePort;private static Map socketList = new HashMap(); //客户端集合信息

private static FileOutputStream fout = null;private static byte[] inputByte = null;private staticTimer timer;public static void main(String[] args) throwsIOException {

Date d= newDate();

String logDateFile=sdfymd.format(d);

String curAddr= System.getProperty("user.dir");//String configAddr = curAddr+"\\mainConfig.txt";//exe执行时路径

String configAddr = curAddr+"\\src\\config\\mainConfig.txt"; //ide工具执行路径

String[] text=getFile(configAddr);for(String con : text) {if("logAddr".equals(con.substring(0, con.indexOf("=")))){

logAddr= con.substring(con.indexOf("=")+1, con.length());

judeDirExists(new File(con.substring(con.indexOf("=")+1, con.length())));

}else if("logImageAddr".equals(con.substring(0, con.indexOf("=")))){

logImageAddr= con.substring(con.indexOf("=")+1, con.length());

judeDirExists(new File(con.substring(con.indexOf("=")+1, con.length())));

}else if("ServiceIp".equals(con.substring(0, con.indexOf("=")))){

ServiceIp= con.substring(con.indexOf("=")+1, con.length());

}else if("ServicePort".equals(con.substring(0, con.indexOf("=")))){

ServicePort= Integer.parseInt(con.substring(con.indexOf("=")+1, con.length()));

}

}

curLogAddr= logAddr+"\\unitTest_"+logDateFile+".log";

judeFileExists(newFile(curLogAddr));

FileWriter fw= new FileWriter(curLogAddr,true);

PrintWriter pw= newPrintWriter(fw);if(!"".equals(logAddr)||!"".equals(logImageAddr)||!"".equals(ServiceIp)||!"".equals(ServicePort)){

pw.write(sdfymdhms.format(new Date())+": 启动成功!\r\n");

pw.flush();

fw.flush();

pw.close();

fw.close();

testMain myFrame= newtestMain();

myFrame.setVisible(true);

myFrame.setTitle("自动开关机工具");

myFrame.setResizable(false);

newService();

}else{

pw.write(sdfymdhms.format(new Date())+": 启动失败,mainConfig.txt配置文件异常!\r\n");

pw.flush();

fw.flush();

pw.close();

fw.close();

}

}public testMain() throwsIOException{

setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置默认关闭,当关闭窗口时,程序即结束

setBounds(100, 100, 600, 360);//设置窗口坐标和大小

setLocationRelativeTo(null);//窗口居中

Font fontStyle = new Font(Font.DIALOG,Font.BOLD, 18);

Font fontConton= new Font(Font.DIALOG,Font.LAYOUT_NO_LIMIT_CONTEXT, 18);

JPanel panel= newJPanel();

JLabel label= new JLabel("IP地址:");

label.setFont(fontStyle);

panel.add(label);final JTextArea IpArea = new JTextArea(10, 35);

IpArea.setLineWrap(true);

IpArea.setFont(fontConton);

JScrollPane IpPane=newJScrollPane(IpArea);

IpPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);

panel.add(IpPane);

JLabel labela= new JLabel("重启效率:");

labela.setFont(fontStyle);

panel.add(labela);final JTextArea DateArea = new JTextArea(1, 3);

DateArea.setLineWrap(false);

DateArea.setBorder(BorderFactory.createLineBorder(Color.black,1));

DateArea.setFont(fontConton);

panel.add(DateArea);

JLabel labeb= new JLabel("(分钟/每次) ");

labeb.setFont(fontStyle);

panel.add(labeb);final JLabel labec = new JLabel("");

JButton btn= new JButton("发送");

btn.setFont(fontStyle);

btn.addActionListener(newActionListener() {

@Overridepublic voidactionPerformed(ActionEvent e) {if(DateArea.getText().isEmpty()||IpArea.getText().isEmpty()){

JOptionPane.showMessageDialog(null, "请输入IP地址和重启效率");

}else{try{

timerFunction(DateArea.getText(),IpArea.getText(),labec);

}catch(IOException e1) {

e1.printStackTrace();

}

}

}

});

panel.add(btn);

labec.setFont(fontStyle);

labec.setForeground(Color.red);

panel.add(labec);this.setContentPane(panel);this.addWindowListener(newWindowAdapter() {

@Overridepublic voidwindowClosing(WindowEvent e){

FileWriter fw= null;try{

fw= new FileWriter(curLogAddr,true);

}catch(IOException e1) {

e1.printStackTrace();

}

PrintWriter pw= newPrintWriter(fw);

pw.write(sdfymdhms.format(new Date())+": 关闭成功!\r\n");try{

pw.flush();

fw.flush();

pw.close();

fw.close();

}catch(IOException e1) {

e1.printStackTrace();

}

System.exit(0);

}

});

}public static void timerFunction(final String timeSize,final String iptext,final JLabel labec) throwsIOException{final int timecount =Integer.parseInt(timeSize);if(timer!=null){

timer.cancel();

}

timer= newTimer();

timer.schedule(newjava.util.TimerTask() {public voidrun() {

timeFunctionContion(iptext,labec);

}

},0, timecount*60*1000);

}public staticString[] getFile(String realpath) {

Scanner scanner= null;

String[] text= new String[4];int i = 0;try{

File file= newFile(realpath);

scanner= newScanner(file);

}catch(FileNotFoundException e) {

e.printStackTrace();

}if(scanner!=null){while(scanner.hasNextLine()){

text[i]=scanner.nextLine();

i++;

}

scanner.close();

}returntext;

}//校验IP

public static booleanipCheck(String text) {if (text != null && !text.isEmpty()) {//定义正则表达式

String regex = "^(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|[1-9])\\."

+"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)\\."

+"(1\\d{2}|2[0-4]\\d|25[0-5]|[1-9]\\d|\\d)$";//判断ip地址是否与正则表达式匹配

if(text.matches(regex)) {return true;

}else{return false;

}

}return false;

}//判断文件夹是否存在

public static voidjudeDirExists(File file) {if (!file.exists()) {

file.mkdir();

}

}//判断文件是否存在

public static voidjudeFileExists(File file) {if (!file.exists()) {try{

file.createNewFile();

}catch(Exception e) {

e.printStackTrace();

}

}

}//通过IP地址获取MAC地址

public static String getMACAddress(String ip) throwsException {

String macAddress= "";try{

String cmd= "ping " +ip;

String ret=callCmd(cmd);if(ret!=null &&!"".equals(ret)){//判断IP地址是否存在

cmd = "nbtstat -a " +ip;

macAddress=callCmdMAC(cmd);

}

}catch(IOException e) {

e.printStackTrace();

}returnmacAddress;

}//获取MAC地址

public static String callCmdMAC(String cmd) throwsIOException{

Process p=Runtime.getRuntime().exec(cmd);

InputStreamReader isr= new InputStreamReader(p.getInputStream(),"GB2312");

BufferedReader br= newBufferedReader(isr);

String line="";int startIndex = 0;while ((line = br.readLine()) != null) {

startIndex= line.indexOf("MAC 地址");if(startIndex>0){

line= line.substring(startIndex+8, line.length()).trim().toUpperCase();break;

}

}

br.close();returnline;

}//创建服务器端

public static String callCmd(String cmd) throwsIOException{

Process p=Runtime.getRuntime().exec(cmd);

InputStreamReader isr= newInputStreamReader(p.getInputStream());

BufferedReader br= newBufferedReader(isr);

String line="";

String ret="";while ((line = br.readLine()) != null) {if (line != null) {

ret=line;

}

}

br.close();returnret;

}//创建服务器端

public static void newService() throwsIOException{

ServerSocket serverSocket=newServerSocket(ServicePort);while(true){

Socket sk= serverSocket.accept(); //当有客户端连接时,产生阻塞

socketList.put(sk.getInetAddress().toString(), sk);

FileWriter fw= new FileWriter(curLogAddr,true);

PrintWriter pw= newPrintWriter(fw);

pw.write(sdfymdhms.format(new Date())+": 新的客户端连接!"+sk.getInetAddress()+":"+sk.getPort()+"\r\n");

System.out.println("新的客户端连接"+sk.getInetAddress()+":"+sk.getPort());

pw.flush();

fw.flush();

pw.close();

fw.close();

}

}public static voidtimeFunctionContion(String iptext,JLabel labec){

FileWriter fw= null;try{

fw= new FileWriter(curLogAddr,true);

}catch(IOException e) {

e.printStackTrace();

}

PrintWriter pw= newPrintWriter(fw);

Date d= newDate();

String dateNowStr=sdfymdhm.format(d);

labec.setText("发送成功,上次发送时间"+dateNowStr);

String[] iplist= iptext.split(",");for(String ip : iplist) {if(ipCheck(ip)){try{

CurSocket= socketList.get("/"+ip);

out=new DataOutputStream(CurSocket.getOutputStream()); //信息接发流

out.writeUTF("shutdown -r -t 20");

in= newDataInputStream(CurSocket.getInputStream());

String curIPImgAddFol= logImageAddr+"\\"+ip;

judeDirExists(newFile(curIPImgAddFol));

fout= new FileOutputStream(new File(curIPImgAddFol+"\\"+in.readUTF()));

inputByte= new byte[1024];int length = 0;while (true) {if (in != null) {

length= in.read(inputByte, 0, inputByte.length);

}if (length == -1) {break;

}

fout.write(inputByte,0, length);

fout.flush();

}

pw.write(sdfymdhms.format(new Date())+": "+ip+"重启成功\r\n");

fout.close();

}catch(Exception e) {

e.printStackTrace();

}

}else{

pw.write(sdfymdhms.format(new Date())+": "+ip+" 地址不合法!\r\n");

}

}try{

fw.flush();

pw.close();

fw.close();

pw.flush();

}catch(IOException e) {

e.printStackTrace();

}

}

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java远程关机_java远程开关机 的相关文章

随机推荐

  • 怎么制作睡袋rust_创造与魔法让小伙伴复活的睡袋制作材料和其放置的位置图解...

    创造与魔法让小伙伴复活的睡袋制作材料和其放置的位置图解 睡袋是这个游戏中非常重要的一个物品 能让小伙伴复活 很多小伙伴都想获得这个 一起来看看创造与魔法让小伙伴复活的睡袋制作材料和其放置的位置吧 创造与魔法睡袋做法介绍 当角色死亡时可直接复
  • 频响特性曲线_扬声器XVI:何为频响曲线?

    频响曲线 分解 频 指 频率 在声音表现中同 音调 响 则可以看作是扬声器系统 机械和电特性 对输入电信号中 频 转换成声能的响应 而这种响应 由麦克风接收并经测试仪器运算后以dB SPL对数值的形式呈现出来 当很多个 频 的响应值连在一起
  • 拉格朗日插值法——matlab代码实现

    公式 function y lagrange x0 y0 x 给定一系列点x0 y0 x是我们要预测的值 由于可以有多个 因此用向量表示 y返回我们的估计值 由于可以有多个 因此用向量表示 n length x 要预测的个数 y zeros
  • python的raw input不识别_python中使用raw input失败的原因

    这两个均是 python 的内建函数 通过读取控制台的输入与用户实现交互 但他们的功能不尽相同 举两个小例子 1 输入为纯数字时 input返回的是数值类型 如int float raw inpout返回的是字符串类型 string类型 u
  • 印象笔记不能同步 显示服务器端出现,印象笔记同步失败,服务器端出现问题...

    印象笔记同步失败 服务器端出现问题0 Log opened on 2013 12 05 09 47 01 UTC 8 00 09 47 01 4848 Command line C Program Files x86 Evernote Ev
  • 1、大家都是怎么看网工的,就这么看不起网络工程师吗?

    这个话题其实一直存在 之前有个朋友在苏宁总部当机房运维 跟他聊天的时候提到了对职业满意度的看法 他跟我说 其实他真心的为他这份工作而骄傲 大部分人认为网工就是敲命令 我真的很想说 命令是这一行最不重要的 路由和生成树都是作为必须要会的 这都
  • 详细的数据可视化库之Seaborn教程(一)——relplot:关系图(可视化统计量间的关系)

    文章目录 seaborn 一 可视化统计量间的关系 relationship sns relplot 一 散点图 relplot kind scatter 参数hue hue hue order hue palette 参数style hu
  • BES平台耳机开发笔记

    有好长一段时间没有在CSDN平台发文章 接下来我将BES平台开发耳机部分做的一些小笔记与大家分享 这里包括了BES2000系列 BES2300系列 BES2500系列就不一一例举了 平时做下的笔记比较多 很难全部上传 我挑选一些比较关键的与
  • 关于频率综合器

    完整版请参考 https mazhaoxin github io 2018 08 12 About Frequency Synthesizer http 483v7j coding pages com 2018 08 12 About Fr
  • 跳表

    跳表 前言 一 什么是跳表 二 跳表的时间复杂度 三 跳表的空间复杂度 四 高效的动态插入和删除 1 插入操作 2 删除操作 五 跳表退化与跳表索引的动态更新 前言 对于二分查找算法 其底层依赖支持随机查找特性的数组 一般情况下只能依靠数组
  • R语言与线性回归分析

    文章目录 1 原始数据的分析 2 回归模型的拟合 参数估计和检验 3 变量选择 4 回归诊断 5 改进措施 6 岭回归 8 其他 基本假设 正态性 独立性 线性 同方差性 常用R包 car carData MASS leap 1 原始数据的
  • paddleocr 训练自己的数据,详细笔记

    目录 算法原理 第一步 制作数据集 数据标注工具 可视化标注 一定要制
  • MYSQL数据库部署--5.7版本数据库部署

    目录 MySQL5 7安装 二进制方式安装 一 安装前的准备 二 安装MySQL数据库 1 解压MySQL安装包 2 将解压后的文件拷贝到安装路径下 3 修改文件的权限 4 创建存放data的文件夹 5 在 etc下创建mysql的参数文件
  • Dubbo admin安装教程

    github下载代码 git clone https github com apache dubbo admin git 打包dubbo admin server java jar 运行 想看的界面需要按照nodejs Node js 完成
  • 全面总结: Golang 调用 C/C++,例子式教程

    https www cnblogs com linguanh p 8323487 html 掘金 https juejin im user 587f0dfe128fe100570ce2d8 博客 http www cnblogs com l
  • 2021.12.6—12.11周总结

    1 将数据结构的查找这一章学完了 线性表 顺序 折半 分块 和树表 二叉排序树 平衡二叉树 B 树和B 树 哈希表 的查找 2 前端的期末作品肝完了 三四天 基本上来说 后续有空应该会继续完善 3 写算法题 准备蓝桥杯吧 虽然过不了 还是去
  • 盒子集成weith,不继承height

    div class fa div class son 111 div div
  • 毕业设计-基于机器学习的短期负荷预测算法

    目录 前言 课题背景和意义 实现技术思路 一 电力负荷预测 二 典型负荷预测算法 实现效果图样例 最后 前言 大四是整个大学期间最忙碌的时光 一边要忙着备考或实习为毕业后面临的就业升学做准备 一边要为毕业设计耗费大量精力 近几年各个学校要求
  • GO如何编写一个 Worker Pool

    作者 JustLorain https juejin cn post 7244733519948333111 前言 池化技术是一种资源管理技术 它通过提前创建和维护一组可重用的资源实例池 以便在需要时快速分配和回收这些资源 协程 gorou
  • java远程关机_java远程开关机

    packagetestFrame importjava awt Color importjava awt Font importjava awt event ActionEvent importjava awt event ActionLi