socket实现客户端与服务端通信(一)服务端
2015-06-02 15:27
507 查看
因为经常用PC开wifi信号坐床上玩手机,但晚上要睡觉了又不想下床去关电脑,就想做个Android控制PC的软件。但是想实现Android控制PC,就得实现客户端和服务端来保持通信,不然无法实现。
所以我先做了服务端。服务端还是比较简单,上代码
服务端会根据客户端发来的数据进行判断再执行相应的操作。真正实现关机重启等操作的是利用Runtime.getRuntime()得到运行时环境,类似于得到了一个cmd窗口,然后执行shutdown命令就可以实现关机,重启等操作了。还有要注意的是,在new ServerSocket(port)时,里面的port端口号必须是空闲的才行,端口号的范围从0到65535,像网络端口80,FTP端口21,mysql默认端口3306,我用的30000端口,一般不会使用。
这样服务端就可以跑起来,不信,试试。
所以我先做了服务端。服务端还是比较简单,上代码
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端口,一般不会使用。
这样服务端就可以跑起来,不信,试试。
相关文章推荐
- 进程标志位(ProcessFlag_ProcessState)
- Wait A Moment, JavaScript Does Support Multiple Inheritance!
- LeetCode Contains Duplicate II Contains Duplicate III
- MongoDB学习笔记~自己封装的Curd操作(按需更新的先决条件)
- Visual Studio 调试技巧
- Linux Shell脚本系列教程(七):脚本调试
- CSDN越做越恶心
- c#窗体传值用法实例详解
- Spark 批量写数据入HBase
- ThinkPHP开发笔记-前后端数据交互
- 安卓笔记-selector选择器
- binlog作用
- 探究String、StringBuffer、StringBuilder的区别?
- 这是SEO优化的系统工作,但绝对不是全部工作
- 导航条菜单
- Visual Studio 调试技巧
- 网页设置导航条
- 关于tomcat的远程调试
- 第六十三条:在细节消息中包含能捕获失败的信息
- Warning: cannot find svn location for distribute==0.6.24dev-r0