PC端与Android手机端使用adb forword通信
服务器端代码如下:
import java.io.IOException; import java.io.ObjectOutputStream; import java.net.Socket; import java.net.UnknownHostException; import java.util.Scanner; public class Server { public static final String TAG = "server"; public static int PC_LOCAL_PORT = 22222; public static int PHONE_PORT = 22222; public static String ADB_PATH = "adb.exe"; /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub YingyonghuiHubServer.execAdb(); } public static void execAdb() { // run the adb bridge try { Process p = Runtime.getRuntime().exec( ADB_PATH + " forward tcp:" + PC_LOCAL_PORT + " tcp:" + String.valueOf(PHONE_PORT)); Scanner sc = new Scanner(p.getErrorStream()); // If there is some output, it failed to start adb if (sc.hasNext()) { while (sc.hasNext()) System.out.println(sc.next()); System.err.println("Cannot start the Android debug bridge"); return; } initializeConnection(); } catch (Exception e) { System.err.println(e.toString()); } } static Socket socket; public static void initializeConnection() { // Create socket connection try { socket = new Socket("localhost", PC_LOCAL_PORT); ObjectOutputStream oos = new ObjectOutputStream( socket.getOutputStream()); oos.writeObject("lalala"); oos.close(); socket.close(); } catch (UnknownHostException e) { System.err.println("Socket connection problem (Unknown host)" + e.getStackTrace()); e.printStackTrace(); } catch (IOException e) { System.err.println("Could not initialize I/O on socket"); e.printStackTrace(); } } }
客户端代码如下:
import java.io.IOException; import java.io.ObjectInputStream; import java.net.ServerSocket; import java.net.Socket; import android.app.Activity; import android.content.Context; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import android.widget.TextView; import android.widget.Toast; public class Client extends Activity { public static final String TAG = "client"; public static int PHONE_PORT = 22222; Context mContext = null; TextView textView = null; ServerSocket server = null; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mContext = this; this.textView = (TextView) this.findViewById(R.id.textView1); try { server = new ServerSocket(PHONE_PORT); } catch (IOException e) { e.printStackTrace(); return; } new RepackTestTask().execute(); } private class RepackTestTask extends AsyncTask { @Override protected Object doInBackground(Object... params) { Socket client = null; // initialize server socket while (true) { try { // attempt to accept a connection client = server.accept(); Log.d(TAG, "Get a connection from " + client.getRemoteSocketAddress().toString()); ObjectInputStream ois = new ObjectInputStream( client.getInputStream()); String somewords = (String) ois.readObject(); Log.d(TAG, "Get some words" + somewords); this.publishProgress(somewords); client.close(); } catch (IOException e) { Log.e(TAG, "" + e); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override protected void onProgressUpdate(Object... values) { super.onProgressUpdate(values); Toast.makeText(mContext, values[0].toString(), Toast.LENGTH_LONG) .show(); } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!