因为经常用PC开wifi信号坐床上玩手机,但晚上要睡觉了又不想下床去关电脑,就想做个Android控制PC的软件。但是想实现Android控制PC,就得实现客户端和服务端来保持通信,不然无法实现。
所以我先做了服务端。服务端还是比较简单,上代码
import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class PCService{ static ServerSocket serversocket = null;// 服务socket static DataInputStream data_input = null;// 输入流 static DataOutputStream data_output = null;// 输出流 public static void main(String[] args) { try { // 监听30000端口 serversocket = new ServerSocket(30000); System.out.println("listening 30000 port"); while (true) { // 获取客户端套接字 Socket client_socket = serversocket.accept(); String send_msg = ""; try { // 获取输入流,读取客户端传来的数据 data_input = new DataInputStream(client_socket.getInputStream()); String msg = data_input.readUTF(); System.out.println(msg); // 判断输入,进行相应的操作 data_output = new DataOutputStream(client_socket.getOutputStream()); if ("shutdown".equals(msg)) { Shutdown(); // 发送消息回Android端 send_msg = "60秒后关机 "; } else if ("restart".equals(msg)) { Restart(); send_msg = "60秒后重启"; } else if ("cancel".equals(msg)) { cancel(); send_msg = "关机已取消"; } } catch (Exception e) { } finally { try { if (data_output != null) { data_output.writeUTF(send_msg); data_output.close(); } data_input.close(); // 关闭连接 client_socket.close(); } catch (IOException e) { e.printStackTrace(); } } } } catch (Exception e) { // TODO: handle exception 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 Restart() throws IOException { Runtime.getRuntime().exec("shutdown -r -t 60"); System.out.println("restart ,60 seconds later "); } // 取消关机或重启 private static void cancel() throws IOException { Runtime.getRuntime().exec("shutdown -a"); System.out.println("cancel "); } }
服务端会根据客户端发来的数据进行判断再执行相应的操作。真正实现关机重启等操作的是利用Runtime.getRuntime()得到运行时环境,类似于得到了一个cmd窗口,然后执行shutdown命令就可以实现关机,重启等操作了。还有要注意的是,在new ServerSocket(port)时,里面的port端口号必须是空闲的才行,端口号的范围从0到65535,像网络端口80,FTP端口21,mysql默认端口3306,我用的30000端口,一般不会使用。
这样服务端就可以跑起来,不信,试试。