[置顶] 手机通过socket控制电脑关机,重启,注销等功能
服务端
package com.pc;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.io.LineNumberReader;
public class Server extends Thread {
private ServerSocket server = null;
private static final int PORT = 20000;
private BufferedWriter writer;
private BufferedReader reader;
private Server() throws IOException {
CreateSocket();
// 创建Socket服务器
}
public void run() {
Socket client;
String txt;
try {
while (true)
// 线程无限循环,实时监听socket端口
{
client = ResponseSocket();
// 响应客户端链接请求。。
while (true) {
txt = ReceiveMsg(client);
// 链接获得客户端发来的命令
System.out.println(txt);
if (txt != null) {
// 执行命令
txt = exceCommand(txt);
}
SendMsg(client, txt);
// 向客户端返回消息
// 中断,关闭此次连接
break;
}
CloseSocket(client);
}
} catch (IOException e) {
System.out.println(e);
}
}
private void CreateSocket() throws IOException {
server = new ServerSocket(PORT);
System.out.println("Server starting..");
}
private Socket ResponseSocket() throws IOException {
Socket client = server.accept();
System.out.println("client connected..");
return client;
}
private void CloseSocket(Socket socket) throws IOException {
reader.close();
writer.close();
socket.close();
System.out.println("client closed..");
}
private void SendMsg(Socket socket, String Msg) throws IOException {
writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
writer.write(Msg + "\n");
writer.flush();
}
private String ReceiveMsg(Socket socket) throws IOException {
reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
System.out.println("server get input from client socket..");
String line = null;
while ((line = reader.readLine()) != null) {
System.out.println(line);
return line;
}
return line;
}
private String exceCommand(String command) {
String msg = "";
try {
Process process = Runtime.getRuntime().exec(command);
InputStreamReader ir = new InputStreamReader(
process.getInputStream());
LineNumberReader input = new LineNumberReader(ir);
String line;
while ((line = input.readLine()) != null) {
System.out.println(line);
msg += line + "\n";
}
} catch (java.io.IOException e) {
System.err.println("IOException " + e.getMessage());
}
return msg;
}
public static void main(final String args[]) throws IOException {
Server commandServer = new Server();
if (commandServer != null) {
commandServer.start();
}
}
}
客户端
package com.android.pc;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.net.UnknownHostException;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.text.TextUtils;
import android.util.Log;
import android.view.Gravity;
import android.view.KeyEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends Activity {
private Button wifi1,baocun,guanji,chongqi,zhuxiao,quxiao,tuichu;
private EditText edit;
private Socket socket;
public static boolean wifi;
public static final int CONNENTED = 0;
public static final int UPDATALOG = 1;
// private TextView log;
private String ip="192.168.2.102";
private String logMsg;
private BufferedWriter writer;
private InetSocketAddress isa = null;
Context mContext;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
findviews();
setonclick();
}
public void findviews() {
guanji=(Button)this.findViewById(R.id.guanji);
chongqi=(Button)this.findViewById(R.id.chongqi);
zhuxiao=(Button)this.findViewById(R.id.zhuxiao);
quxiao=(Button)this.findViewById(R.id.quxiao);
tuichu=(Button)this.findViewById(R.id.tuichu);
wifi1=(Button)this.findViewById(R.id.wifi);
edit=(EditText)this.findViewById(R.id.edit);
baocun=(Button)this.findViewById(R.id.baocun);
}
private void setonclick() {
guanji.setOnClickListener(new OnClickListener1());
chongqi.setOnClickListener(new OnClickListener2());
zhuxiao.setOnClickListener(new OnClickListener3());
quxiao.setOnClickListener(new OnClickListener4());
tuichu.setOnClickListener(new OnClickListener5());
wifi1.setOnClickListener(new OnClickListener6());
baocun.setOnClickListener(new OnClickListener7());
}
private class OnClickListener1 implements OnClickListener{
@Override
public void onClick(View v) {
String str1="shutdown -s";
tcpClient tcp = new tcpClient(str1.toString());
tcp.start();
}
}
class OnClickListener7 implements OnClickListener{
@Override
public void onClick(View v) {
ip=edit.getText().toString();
}
}
private class OnClickListener2 implements OnClickListener{
@Override
public void onClick(View v) {
String str2="shutdown -r";
tcpClient tcp = new tcpClient(str2.toString());
tcp.start();
}
}
private class OnClickListener3 implements OnClickListener{
@Override
public void onClick(View v) {
String str3="shutdown -l";
tcpClient tcp = new tcpClient(str3.toString());
tcp.start();
}
}
private class OnClickListener4 implements OnClickListener{
@Override
public void onClick(View v) {
String str3="shutdown -a";
tcpClient tcp = new tcpClient(str3.toString());
tcp.start();
}
}
private class OnClickListener5 implements OnClickListener{
@Override
public void onClick(View v) {
MainActivity.this.finish();
}
} private class OnClickListener6 implements OnClickListener{
@Override
public void onClick(View v) {
if(!wifi){
AlertDialog.Builder builder=new AlertDialog.Builder(MainActivity.this);
builder.setTitle("提示");
builder.setMessage("WIFI没有打开");
WifiManager w =(WifiManager)MainActivity. this.getSystemService(Service.WIFI_SERVICE);
w.setWifiEnabled(true);
Toast toast = Toast.makeText(MainActivity.this, "正在打开,请等待", Toast.LENGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
}
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("PC ");
builder.setMessage("是否退出 ?");
builder.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
finish();
}
});
builder.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
}
});
builder.show();
}
return super.onKeyDown(keyCode, event);
}
public void connecttoserver() throws UnknownHostException, IOException {
socket = RequestSocket(ip, 20000);
if (socket.isConnected()) {
Message msg = new Message();
msg.what = CONNENTED;
mHandler.sendMessage(msg);
}
}
private Socket RequestSocket(String host, int port)
throws UnknownHostException, IOException {
Socket ConSocket = new Socket();
isa = new InetSocketAddress(host, port);
ConSocket.connect(isa);
return ConSocket;
}
Handler mHandler = new Handler() {
public void handleMessage(Message msg) {
switch (msg.what) {
case CONNENTED:
break;
case UPDATALOG:
break;
}
}
};
private void SendMsg(Socket socket, String msg) throws IOException {
writer = new BufferedWriter(new OutputStreamWriter(
socket.getOutputStream()));
Log.i("msg", msg.replace("\n", " ") + "\n");
writer.write(msg.replace("\n", " ") + "\n");
writer.flush();
}
private String ReceiveMsg(Socket socket) throws IOException {
BufferedReader reader = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
String line;
String txt = "";
while ((line = reader.readLine()) != null) {
txt += line + "\n";
}
reader.close();
return txt;
}
class tcpClient extends Thread {
String commandString;
public tcpClient(String command) {
commandString = command;
}
public void run() {
String recv;
try {
connecttoserver();
SendMsg(socket, commandString);
recv = ReceiveMsg(socket);
if (recv != null) {
logMsg += recv;
// close BufferedWriter and socket
writer.close();
socket.close();
// updata to log
Message msg = new Message();
msg.what = UPDATALOG;
mHandler.sendMessage(msg);
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
activity_main.xml文件
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
android:id="@+id/wifi"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="连接无线"/>
<EditText
android:id="@+id/edit"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:hint="输入IP"/>
<Button
android:id="@+id/baocun"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="连接到PC"/>
<Button
android:id="@+id/guanji"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_medium"
android:text="关机" />
<Button
android:id="@+id/chongqi"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_medium"
android:text="重启" />
<Button
android:id="@+id/zhuxiao"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_medium"
android:text="注销" />
<Button
android:id="@+id/quxiao"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_medium"
android:text="取消关机" />
<Button
android:id="@+id/tuichu"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:padding="@dimen/padding_medium"
android:text="退出程序" />
</LinearLayout>
[置顶] 手机通过socket控制电脑关机,重启,注销等功能的更多相关文章
- C# 操作电脑 关机 重启 注销 休止 休眠
// 关机 强制电脑10秒之内关机 //System.Diagnostics.Process.Start("shutdown", "-s -f -t 10"); ...
- C# 关机/重启/注销计算机
一.调用 shutdown.exe 执行操作 调用 shutdown.exe 执行计算机关机.重启.注销操作,还可以设置多长时间后执行操作,代码如下: 1 /// <summary> 2 ...
- Linux关机重启注销(3)
1.关机重启 shutdown shutdown -h now :立即关机 shutdown -h 1 now :一分钟后关机 shutdown -r now :立即重启 halt:关机 reboot ...
- linux基础_关机重启注销
1.关机重启命令 (1)shutdown shutdown -h now:表示立即关机 shutdown -h 1:表示1分钟后关机 shutdown -r now:立即重启 (2)halt:就是直 ...
- Runtime单例模式类 -- 控制电脑关机
package demo1; import java.io.IOException; public class RunTimeDemo { public static void main(String ...
- PHPCMS实现文章置顶功能的方法
我个人喜欢把PHPCMS当作博客来用,而作为一个博客,怎能少了文章置顶功能呢?其中用PHPCMS实现置顶功能非常简单,无非是修改下推荐位的名称为置顶,然后在文章列表中推送需要置顶的文章罢了. 不过博客 ...
- 手机控制电脑定时关机,重启WiFi
需求 晚上上床,电脑开着WiFi让手机上网.要么上床之前就给电脑设置定时关机:要么就电脑开通宵:要么就待会下来关电脑.这3种情况都非常不好,要么麻烦,要么浪费. 最无奈的是电脑刚开好WiFi,上床后才 ...
- 手机控制电脑,在WIFI局域网下(关机,重启,遥控)
这个软件叫百变遥控:http://blog.sina.com.cn/s/blog_9abc7dbc0101hmut.html 今天周末,在家里看电影,家里用的是台式电脑,我自己买了一个投影仪来专门看视 ...
- Andy - 又一款速度流畅的免费安卓 Android 模拟器 (支持手机无线控制电脑模拟器)
随着 Genymotion.BlueStacks 等电脑上的 Android 模拟器流行起来之后,似乎很多人都发现在电脑上运行使用安卓APP软件.畅玩手机游戏确实很有乐趣. 今天我们又发现了一款全新免 ...
随机推荐
- opencv学习笔记(04)——ROI
ROI的用法:1.直接相加:2.掩码法 #include <opencv2\highgui\highgui.hpp> #include <opencv2\imgproc\imgpro ...
- Java之this详解
1. this是指当前对象自己. 用类名定义一个变量的时候,定义的应该只是一个引用,外面可以通过这个引用来访问这个类里面的属性和方法,那们类里面是够也应该有一个引用来访问自己的属性和方法纳?呵呵,JA ...
- iOS的SandBox的结构研究
在模拟器中运行iOS程序,都会为该程序创建一个沙盒(SandBox).首先声明,我用的系统是Max OS X 10.7.3,编译器是Xcode 4.3.2.想要找到沙盒目录,先运行Finder,然后在 ...
- 从零开始学ios开发(七):Delegate,Action Sheet, Alert
Action Sheet和Alert是2种特殊的控件(暂且称之为控件吧,其实不是控件真正的控件,而是ios中的2个类,这2个类定义了2种不同类型的用于和用户交互的弹出框),Action Sheet是从 ...
- 从零开始学ios开发(五):IOS控件(2),Slider
下面继续学习ios的其他控件,这次会使用到的控件有Slider,当然还有一些之前已经使用过的控件Label. 这次我们不新建一个project了,当然如果你愿意重新创建一个新的项目也完全可以,我们还是 ...
- Android 开发 res里面的drawable(ldpi、mdpi、hdpi、xhdpi、xxhdpi)
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA (480x854) (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x ...
- 从OGRE,GAMEPLAY3D,COCOS2D-X看开源
OGRE,大家都很熟悉咯. 说到这一点真的有点好笑,我见过很多人说认识OGRE,但是却不知道D3D和OPENGL是什么东东的,可能是我的笑点真的很低,反正是莫名喜感.前天在COCOS2D-X的一个群里 ...
- uoj 67 新年的毒瘤 割点
题目链接: 题目 #67. 新年的毒瘤 问题描述 辞旧迎新之际,喜羊羊正在打理羊村的绿化带,然后他发现了一棵长着毒瘤的树. 这个长着毒瘤的树可以用 nn 个结点 mm 条无向边的无向图表示.这个图中有 ...
- 完整实例(C# Socket)
问题描述: 现在创建一个C# Socket实例,客户端断开服务器能立刻输出断开连接客户端信息 服务器端断开,客户端能立刻察觉服务器状态 问题解决: 服务器端代码: 客户端代码: 以上 ...
- jQuery+AJAX实现网页无刷新上传
新年礼,提供简单.易套用的 jQuery AJAX上传示例及代码下载.后台对文件的上传及检查,以 C#/.NET Handler 处理 (可视需要改写成 Java 或 PHP). 有时做一个网站项目 ...