我的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

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

 


相关文章
|
13天前
|
弹性计算 运维 监控
云产品评测:云服务诊断 — ECS实例健康状态与诊断功能体验
作为一名运维工程师,我日常管理和维护云资源,确保服务稳定运行。阿里云的云服务诊断功能提供了便捷的方式实时了解和优化ECS实例的健康状态。通过健康状态功能,我能够查看CPU、内存等指标,及时发现并解决性能瓶颈,提升了约30%的工作效率。诊断功能则帮助我快速定位复杂问题,减少了40%的诊断时间,并提供详细的优化建议。尽管功能已很强大,但仍建议进一步细化诊断结果和增加自定义告警选项,以提升使用体验。我非常推荐此工具给其他运维人员。
61 22
|
23天前
|
弹性计算 运维 开发者
关于ECS 健康状态 诊断功能评测
这是一位开发兼运维工程师的观点,认为云资源的健康状态和诊断功能作用有限,因为大多数问题根源在于代码质量,而这些工具无法改善低下的代码质量导致的资源异常。
|
2月前
|
Android开发 数据安全/隐私保护 虚拟化
安卓手机远程连接登录Windows服务器教程
安卓手机远程连接登录Windows服务器教程
118 4
|
2月前
|
NoSQL 应用服务中间件 PHP
布谷一对一直播源码服务器环境配置及app功能
一对一直播源码阿里云服务器环境配置及要求
|
2月前
|
Linux 数据库
Linux服务如何实现服务器重启后的服务延迟自启动?
【10月更文挑战第25天】Linux服务如何实现服务器重启后的服务延迟自启动?
343 3
|
3月前
|
Android开发
Android开发表情emoji功能开发
本文介绍了一种在Android应用中实现emoji表情功能的方法,通过将图片与表情字符对应,实现在`TextView`中的正常显示。示例代码展示了如何使用自定义适配器加载emoji表情,并在编辑框中输入或删除表情。项目包含完整的源码结构,可作为开发参考。视频演示和源码详情见文章内链接。
82 4
Android开发表情emoji功能开发
|
3月前
|
Ubuntu Linux Android开发
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
本文介绍了如何在Android设备上安装Termux和AnLinux,并通过这些工具运行Ubuntu系统和桌面环境。
200 2
termux+anlinux+Rvnc viewer来使安卓手机(平板)变成linux服务器
|
2月前
|
安全 搜索推荐 Android开发
Android vs. iOS:解锁智能手机操作系统的奥秘####
【10月更文挑战第21天】 在当今这个数字化时代,智能手机已成为我们生活中不可或缺的伙伴。本文旨在深入浅出地探讨两大主流操作系统——Android与iOS的核心差异、优势及未来趋势,帮助读者更好地理解这两个平台背后的技术哲学和用户体验设计。通过对比分析,揭示它们如何塑造了我们的数字生活方式,并展望未来可能的发展路径。无论您是技术爱好者还是普通用户,这篇文章都将带您走进一个充满创新与可能性的移动世界。 ####
95 3
|
3月前
|
安全 Android开发 iOS开发
Android vs iOS:探索移动操作系统的设计与功能差异###
【10月更文挑战第20天】 本文深入分析了Android和iOS两个主流移动操作系统在设计哲学、用户体验、技术架构等方面的显著差异。通过对比,揭示了这两种系统各自的独特优势与局限性,并探讨了它们如何塑造了我们的数字生活方式。无论你是开发者还是普通用户,理解这些差异都有助于更好地选择和使用你的移动设备。 ###
60 3
|
3月前
|
Web App开发 Android开发
利用firefox调试安卓手机端web
该教程详细介绍如何通过Firefox浏览器实现手机与电脑的远程调试。手机端需安装最新版Firefox,并按指定步骤设置完成;电脑端则需安装15版及以上Firefox。设置完成后,通过工具栏中的“远程调试”选项,输入手机IP地址即可连接。连接确认后,即可使用电脑端Firefox调试器调试手机上的Web信息。注意,调试前手机需提前打开目标网页。
110 2