android手機(jī)端與PC端使用adb forword通信
PC端與Android手機(jī)端使用adb forword通信
服務(wù)器端代碼如下:
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(); } } }
客戶(hù)端代碼如下:
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(); } } }
感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!
相關(guān)文章
從0快速搭建一個(gè)實(shí)用的MVVM框架(超詳細(xì))
這篇文章主要介紹了從0搭建一個(gè)實(shí)用的MVVM框架,結(jié)合Jetpack,構(gòu)建快速開(kāi)發(fā)的MVVM框架,支持快速生成ListActivity、ListFragment,主要是基于MVVM進(jìn)行快速開(kāi)發(fā)上手即用,需要的朋友可以參考下2022-03-03Android實(shí)現(xiàn)zip文件壓縮及解壓縮的方法
這篇文章主要介紹了Android實(shí)現(xiàn)zip文件壓縮及解壓縮的方法,涉及Android針對(duì)文件的遍歷及zip壓縮與解壓縮的實(shí)現(xiàn)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-07-07Android時(shí)間日期拾取器學(xué)習(xí)使用(DatePicker、TimePicker)
這篇文章主要為大家詳細(xì)介紹了Android提供的DatePicker日期拾取器和TimePicker時(shí)間拾取器的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02Android利用CountDownTimer實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計(jì)時(shí)效果
這篇文章主要為大家詳細(xì)介紹了Android利用CountDownTimer實(shí)現(xiàn)點(diǎn)擊獲取驗(yàn)證碼倒計(jì)時(shí)效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03Android自定義流式布局/自動(dòng)換行布局實(shí)例
這篇文章主要介紹了Android自定義流式布局/自動(dòng)換行布局實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-03-03android中實(shí)現(xiàn)手機(jī)號(hào)碼的校驗(yàn)的示例代碼
本篇文章主要介紹了android中實(shí)現(xiàn)手機(jī)號(hào)碼的校驗(yàn)的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-09-09Android顏色處理SweepGradient掃描及梯度渲染示例
這篇文章主要為大家介紹了Android顏色處理SweepGradient掃描渲染及梯度渲染示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06