本文共 6981 字,大约阅读时间需要 23 分钟。
突然想到将用windows的程序控制Android程序,就像到了使用socket编程。
下面是android端的程序
import android.os.Handler;import android.os.Message;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.util.Log;import android.view.Menu;import android.view.MenuItem;import android.widget.TextView;import android.widget.Toast;import java.io.IOException;import java.io.InputStream;import java.io.UnsupportedEncodingException;import java.net.ServerSocket;import java.net.Socket;public class MainActivity extends AppCompatActivity { private Socket clientSocket = null; private ServerSocket mServerSocket = null; private Handler mHandler = null; private AcceptThread mAcceptThread = null; private ReceiveThread mReceiveThread = null; private boolean stop = true; private TextView ipText; private TextView rcvText; private TextView ConnectStatusText; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); ipText = (TextView)findViewById(R.id.textView1); rcvText = (TextView)findViewById(R.id.textView3); ConnectStatusText = (TextView)findViewById(R.id.textView4); ConnectStatusText.setText("连接状态: 未连接"); // 消息处理 mHandler = new Handler() { @Override public void handleMessage(Message msg) { switch(msg.what) { case 0: { String strAddress = (msg.obj).toString(); ipText.setText("IP地址: " + strAddress); Log.v("Leo: IP: ", strAddress); ConnectStatusText.setText("连接状态: 已连接"); // 显示客户端IP // ipTextView.setText((msg.obj).toString()); // 使能发送按钮 // sendButton.setEnabled(true); break; } case 1: { String strRcv = (msg.obj).toString(); rcvText.setText("接收到数据: " + strRcv); Log.v("Leo: Rcv: ", strRcv); // 显示接收到的数据 // mTextView.setText((msg.obj).toString()); break; } } } }; mAcceptThread = new AcceptThread(); // 开启监听线程 mAcceptThread.start(); } // 显示Toast函数 private void displayToast(String s) { Toast.makeText(this, s, Toast.LENGTH_SHORT).show(); } private class AcceptThread extends Thread { @Override public void run() { try { // 实例化ServerSocket对象并设置端口号为 12589 mServerSocket = new ServerSocket(12598); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.d("abc", "run: "+e.getMessage()); } try { // 等待客户端的连接(阻塞) clientSocket = mServerSocket.accept(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); Log.d("abc", "run: "+e.getMessage()); } mReceiveThread = new ReceiveThread(clientSocket); stop = false; // 开启接收线程 mReceiveThread.start(); Message msg = new Message(); msg.what = 0; // 获取客户端IP msg.obj = clientSocket.getInetAddress().getHostAddress(); // 发送消息 mHandler.sendMessage(msg); } } private class ReceiveThread extends Thread { private InputStream mInputStream = null; private byte[] buf; private String str = null; ReceiveThread(Socket s) { try { // 获得输入流 this.mInputStream = s.getInputStream(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void run() { while(!stop) { this.buf = new byte[512]; // 读取输入的数据(阻塞读) try { this.mInputStream.read(buf); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } // 字符编码转换 try { this.str = new String(this.buf, "GB2312").trim(); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); } Message msg = new Message(); msg.what = 1; msg.obj = this.str; // 发送消息 mHandler.sendMessage(msg); } } }}
下图是pc端调试