读书人

Android兑现远程控制PC(Android[客户端

发布时间: 2012-08-03 00:12:14 作者: rapoo

Android实现远程控制PC(Android[客户端]+Qt[服务器端])

由于本人没有无线路由器,因此用Win7自带的虚拟wifi让手机上网:Win7虚拟wifi

但是,电脑不在我的房间,因此每天晚上在床上玩完手机还要下床去关电脑,让很懒很懒的本人很不爽,因此自己尝试着做了一个远程控制。

软件客户端运行在Android设备上(我的手机是Android的),服务器端运行在我的Win7本本上。客户端用的是Android平台应用编程,服务器端用的是Qt编写的。

首先设置好默认端口,然后设置控制方法,为了方便起见,这里直接利用标准C中的system接口(调用shell,Win7下就是cmd命令提示符了)。客户端发送命令给服务器,服务器直接执行命令,并将标准输出返回给客户端。

下面看一些代码,具体代码可以到这里下载:工程源代码

服务器端:

头文件:

mainwindow.h

package com.tobacco.phonetest;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import android.app.Activity;import android.os.Bundle;import android.os.Handler;import android.util.Log;import android.view.Menu;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.EditText;import android.widget.TextView;public class MainActivity extends Activity implements OnClickListener,Runnable{private Button button;private Button clear;private EditText editText;private TextView tv;private Socket socket;private PrintWriter pw;private BufferedReader br;//private InputStream is;private Handler handler;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        handler=new Handler();        button=(Button)findViewById(R.id.button);        clear=(Button)findViewById(R.id.clear);        button.setOnClickListener(this);        clear.setOnClickListener(this);        editText=(EditText)findViewById(R.id.edittext);        tv=(TextView)findViewById(R.id.textView);        try {//socket=new Socket("tobacco5648.xicp.net",5648); //我的pc域名        socket=new Socket("192.168.137.1",5648);   //建立socket,这里应该根据pc的ip地址进行修改        //socket=new Socket("www.baidu.com",80);} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();Log.e("socket","unknown host");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();Log.e("socket","io execption");}        if(socket==null){        Log.e("socket","null");        }        else        try {pw=new PrintWriter(socket.getOutputStream());br=new BufferedReader(new InputStreamReader(socket.getInputStream(),"gbk"));String remote=socket.getInetAddress().getHostAddress();String self=socket.getLocalAddress().getHostAddress();tv.setText("connected!"+"\r\n"+"remote:"+remote+"\r\n"+"local:"+self+"\r\n");//is=socket.getInputStream();if(pw!=null&&br!=null){new Thread(this).start();}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}    }    @Override    public boolean onCreateOptionsMenu(Menu menu) {        getMenuInflater().inflate(R.menu.activity_main, menu);        return true;    }public void onClick(View view) {if(view==button){String str;str=editText.getText().toString();pw.print(str);pw.flush();}else if(clear==view){tv.setText("");}}public void run() {while(true){try {String str;while((str=br.readLine())!=null){final String s=str;handler.post(new Runnable(){public void run() {tv.setText(tv.getText()+s+"\r\n");}});}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}    }

读书人网 >Android

热点推荐