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

因为经常开着笔记本工作,累了就坐床上玩手机,但晚上要睡觉了又不想下床去关电脑,就想做个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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-23 03:35:48

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

我的Android进阶之旅------>Android实现用Android手机控制PC端的关机和重新启动的功能(二)Androidclient功能展示

Androidclient的实现思路大致例如以下: 1.首先扫描局域网内全部PC,看是否有PC端的server在执行并监听30000port. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"> 2.假设没有扫描到有PC端的server在执行并监听30000port.则又一次扫描或者退出. 3.扫描到了有

我的Android进阶之旅------>Java字符串格式化方法String.format()格式化float型时小数点变成逗号问题

今天接到一个波兰的客户说有个APP在英文状态下一切运行正常,但是当系统语言切换到波兰语言的时候,程序奔溃了.好吧,又是我来维护. 好吧,先把系统语言切换到波兰语,切换到波兰语的方法查看文章 我的Android进阶之旅------>Android[设置]-[语言和输入法]-[语言]列表中找到相应语言所对应的列表项 地址:http://blog.csdn.net/ouyang_peng/article/details/50209789 ================================

我的Android进阶之旅------>如何获取系统中定义了那些权限

在Window控制台中输入如下命令可以看到Android系统中列出的所有权限(如果自定义权限注册成功,在这里也会找到这些自定义的权限) adb shell pm list permissions C:\Users\Administrator>adb shell pm list permissions All Permissions: permission:android.permission.INTERNAL_SYSTEM_WINDOW permission:android.permission

我的Android进阶之旅------>Android疯狂连连看游戏的实现之实现游戏逻辑(五)

在上一篇<我的Android进阶之旅------>Android疯狂连连看游戏的实现之加载界面图片和实现游戏Activity(四)>中提到的两个类: GameConf:负责管理游戏的初始化设置信息. GameService:负责游戏的逻辑实现. 其中GameConf的代码如下:cn\oyp\link\utils\GameConf.java package cn.oyp.link.utils; import android.content.Context; /** * 保存游戏配置的对象

我的Android进阶之旅------&gt; Android在TextView中显示图片方法

面试题:请说出Android SDK支持哪些方式显示富文本信息(不同颜色.大小.并包含图像的文本信息),并简要说明实现方法. 答案:Android SDK支持如下显示富文本信息的方式. 1.使用TextView组件可以显示富文本信息.在TextView组件中可以使用富文本标签来显示富文本信息,这种标签类似于HTML标签,但比HTML标签简单,支持有限的几种显示富文本的方式.如<font>标签用于设置字体和颜色,<b>用于设置粗体.包含这些标签的文本不能直接作为TextView.se

我的Android进阶之旅------&gt; Android为TextView组件中显示的文本添加背景色

通过上一篇文章 我的Android进阶之旅------> Android在TextView中显示图片方法 (地址:http://blog.csdn.net/ouyang_peng/article/details/46916963) 我们学会了在TextView中显示图片的方法,现在我们来学习如何为TextView组件中显示的文本添加背景色.要求完成的样子如图所示: 首先来学习使用BackgroundColorSpan对象设置文字背景色,代码如下: TextView textView=(TextV

我的Android进阶之旅------&amp;gt;怎样将Activity变为半透明的对话框?

我的Android进阶之旅------>怎样将Activity变为半透明的对话框?能够从两个方面来考虑:对话框和半透明. 在定义Activity时指定Theme.Dialog主题就能够将Activity设置为对话框风格. 通过改动Theme.Dialog主题的android:windowBackground属性值能够改变Activity的背景图像. 假设背景图像使用半透明的图像,则Activity就好变成半透明的对话框.为了改动android:windowBackground属性,能够定义一个新

我的Android进阶之旅------&gt;解决:Execution failed for task &#39;:app:transformResourcesWithMergeJavaResForDebug&#39;.

错误描述 今天在Android Studio项目中加入了jackson的开发包,编译运行时候,引发了如下的错误: Error:Execution failed for task ':app:transformResourcesWithMergeJavaResForDebug'. > com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Du

我的Android进阶之旅------&gt;Android字符串资源中的单引号问题error: Apostrophe not preceded by 的解决办法

刚刚在string字符串资源文件中,写了一个单引号,报错了,错误代码如下 error: Apostrophe not preceded by \ (in OuyangPeng's blog ) 资源文件如下: <?xml version="1.0" encoding="utf-8"?> <resources> <string name="ouyang">OuyangPeng's blog </string