Android Socket开发
突然想到将用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端调试