开发者社区> 欧阳鹏> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重启的功能(一)PC服务器端

简介: 因为经常开着笔记本工作,累了就坐床上玩手机,但晚上要睡觉了又不想下床去关电脑,就想做个Android软件来控制PC端的关机和重启。要想实现此功能,就得让Android手机和PC之间进行通信才能,因此采用Socket编程来实现。
+关注继续查看

因为经常开着笔记本工作,累了就坐床上玩手机,但晚上要睡觉了又不想下床去关电脑,就想做个Android软件来控制PC端的关机和重启。要想实现此功能,就得让Android手机和PC之间进行通信才能,因此采用Socket编程来实现。

 ==================================Shutdown命令的用法========================================

  首先得了解一下关于Shutdown命令的用法。

选择win+R,打开命令行窗口,输入shutdown /?   按Enter回车键,

即可以查看一些shutdown的用法:

shutdown   -l      注销。这不能与 /m 或 /d 选项一起使用。

shutdown   -s      关闭计算机。

shutdown   -r      完全关闭并重新启动计算机。

shutdown   -a      中止系统关闭。

shutdown   -p      关闭本地计算机,没有超时或警告。

shutdown   -h      休眠本地计算机。

shutdown   -t xxx  将关闭前的超时时间设置为 xxx 秒。     

shutdown   -c "comment" 有关重新启动或关闭的原因的注释。

shutdown   -f      强制关闭正在运行的应用程序而不事先警告用户。

shutdown   -d [p|u:]xx:yy  提供重新启动或关闭的原因。


下面介绍一些shutdown的一个最常用的功能,即定时关机、重启和取消关机。


定时关机,即shutdown -s -t "这里填时间" 如:shutdown -s -t 60 

这里时间是按秒来算的,即是一分钟之后关机。



定时关机并重启,即shutdown -r -t "这里填时间" 如:shutdown -r -t 60 

这里时间是按秒来算的,即是一分钟之后关机r然后重启。



我们可以使用shutdown -a来取消定时关机的任务,不过要在关机的前一秒



================================PC服务器端的实现===========================================

PC端的服务器代码很简单,就是监听端口30000,然后获取Android发过来的指令,使用Runtime.getRuntime().exec(String command)方法来执行上面介绍的Shutdown命令,来实现控制PC端的关机、重启或者取消关机的功能。

端口号必须是空闲的才行,端口号的范围从0到65535,像网络端口80,FTP端口21,mysql默认端口3306,我用的30000端口,一般不会被占用。

代码如下:

package com.oyp.shutdown;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ShutDownServer {

	static ServerSocket serverSocket = null;// 服务socket
	static DataInputStream dataInput = null;// 输入流
	static DataOutputStream dataOutput = null;// 输出流

	public static void main(String[] args) {
		try {
			// 监听30000端口
			serverSocket = new ServerSocket(30000);
			System.out.println("ShutDownServer is listening  port 30000............");

			while (true) {
				// 获取客户端套接字
				Socket clientSocket = serverSocket.accept();
				String send_msg = "";
				try {
					// 获取输入流,读取客户端传来的数据
					dataInput = new DataInputStream(
							clientSocket.getInputStream());
					String msg = dataInput.readUTF();
					System.out.println(msg);
					// 判断输入,进行相应的操作
					dataOutput = new DataOutputStream(
							clientSocket.getOutputStream());
					if ("shutdown".equals(msg)) {
						shutdown();
						// 发送消息回Android端
						send_msg = "60秒后关机 ";
					} else if ("reboot".equals(msg)) {
						reboot();
						send_msg = "60秒后重启";
					} else if ("cancel".equals(msg)) {
						cancel();
						send_msg = "取消关机或重启";
					}
				} catch (Exception e) {
				} finally {
					try {
						if (dataOutput != null) {
							dataOutput.writeUTF(send_msg);
							dataOutput.close();
						}
						dataInput.close();
						// 关闭连接
						clientSocket.close();
					} catch (IOException e) {
						e.printStackTrace();
					}
				}
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 关机
	private static void shutdown() throws IOException {
		Runtime.getRuntime().exec("shutdown -s -t 60");
		System.out.println("shutdown ,60 seconds later ");
	}

	// 重启
	private static void reboot() throws IOException {
		Runtime.getRuntime().exec("shutdown -r -t 60");
		System.out.println("reboot ,60 seconds later ");
	}

	// 取消关机或重启
	private static void cancel() throws IOException {
		Runtime.getRuntime().exec("shutdown -a");
		System.out.println("cancel shutdown or restart");
	}

}

运行后,效果如下:

1、一直在监听端口30000

2、当Android客户端发送关机请求后



3、当Android客户端发送取消关机请求后


4、当Android客户端发送重启请求后




 


                            ====================================================================================

  作者:欧阳鹏  欢迎转载,与人分享是进步的源泉!

  转载请保留原文地址http://blog.csdn.net/ouyang_peng

====================================================================================

 


版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
再次搞定 Ali 云函数计算 FC
原本早就该写完了微信 SDK 授权服务上云计划由于对 Ali 云函数计算 FC 的不熟悉遇到了很多的坑,再前面的文章中还吐槽了一通。在服务顺利跑通后,这回实打实的来总结一下顺利上云的保守指南~
22851 0
特稿|过去5年,阿里云是如何打造云原生数据库PolarDB的
阿里云在云原生数据库领域的自研创新突围。
23390 0
如何优雅的消除系统重复代码
在程序猿的日常工作中,不仅要跟随业务侧的发展不断开发新的需求,同时也需要维护老的已有平台。无论是开发新需求还是维护老系统,我们都会遇到同样一个问题,系统中总是充斥着很多重复的代码。
23802 0
初识Serverless函数计算
Serverless 并不是没有服务器,而是开发者不再需要关心服务器。在传统 Serverful 架构下,部署一个应用需要购买服务器,部署操作系统,搭建开发环境,编写代码,构建应用,部署应用,配置负载均衡机制,搭建日志分析与监控系统,应用上线后,继续监控应用的运行情况。而在 Serverless 架构下,开发者只需要关注应用的开发构建和部署,无需关心服务器相关操作与运维,在函数计算架构下,开发者只需要编写业务代码并监控业务运行情况。这将开发者从繁重的运维工作中解放出来,把精力投入到更有意义的业务开发上。
24238 0
【AI征文】对DeepRec认识以及了解
对DeepRec认识以及了解
57465 0
Tensorflow Serving部署模型与调用
本文以mnist为数据集,使用keras 构建CNN网络,将训练获取的模型通过Tensorflow Serving方式部署提供Rest Full接口,分别使用PostMan和Python调用服务,代码编辑调试使用阿里云PAI DSW实例,模型部署使用阿里云ECS虚拟机。
6036 0
业务中台之上的低代码应用开发平台
中台低代码平台帮助开发者掌握全栈能力,促进开发者提高工作效率,基于企业数字化业务能力组件,可以实现业务应用的敏捷按需装配,成为企业组装式应用创新平台,进而实现企业业务能力的持续优化和复用,促进从组织到企业甚至行业的业务能力集约与创新。
100899 0
十分钟生成影视级室内设计效果,红星美凯龙设计云如何升级传统家居行业
依托于阿里云强大的弹性云上GPU算力,红星美凯龙可以为客户提供快速的、高质量的渲染,实现秒级的门店快速设计。
65935 0
+关注
欧阳鹏
一个人,如果你不逼自己一把,你根本不知道自己有多优秀! Talk is cheap, show me the code.
473
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载