android手机端与PC端使用adb forword通信
作者:lqh 发布时间:2022-09-15 14:17:35
标签:Android,adb,forword
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();
}
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
来源:http://blog.csdn.net/paulluo0739/article/details/8175170


猜你喜欢
- static void Main(string[] args) &nb
- Android获取系统cpu信息,内存,版本,电量等信息 1、CPU频率,CPU信息:/proc/cpuinfo和/proc/stat 通过
- Android资源文件大致可以分为两种:第一种是res目录下存放的可编译的资源文件:这种资源文件系统会在R.java里面自动生成该资源文件的
- 一般对于业务复杂的流程,会有一些处理逻辑不需要及时返回,甚至不需要返回值,但是如果充斥在主流程中,占用大量时间来处理,就可以通过异步的方式来
- 1. java 位掩码java 位掩码,在java开发中很少有场景会用到掩码,但是当系统中需要判断某个对象是否有 某些权限时,可以通过位掩码
- 什么是代理模式?代理模式:在调用处不直接调用目标类进行操作,而是调用代理类,然后通过代理类来调用目标类进行操作。在代理类调用目标类的前后可以
- oshi查看cpu信息OSHI可以跨平台查看服务器信息,其中cpu负载信息为当前占用CPU的时间。需要在一段时间内获取两次,然后相减得出这段
- 1. 概述当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。2. 解决的问题主要解决的是当控制一个对象状态转换的条件表
- 我们有一个TextView,其里面的内容是可以通过代码动态改变的,我们想用一张图片作为TextView的背景,实现类似于手机QQ对话中的气泡
- 本文实例为大家分享了Java实现高校教务系统的具体代码,供大家参考,具体内容如下需求:建立一个教务管理系统,为学生和教师提供不同的功能//简
- 1. 拷贝 Mybatis 反向工程配置文件到项目的根目录下2. 根据项目及表的情况,修改 GeneratorMapper.xml 配置如果
- 一、实现对ScrollViewer样式的自定义主要包括:1、滚动条宽度设置2、滚动条颜色3、滚动条圆角4、滚动条拉动时的效果mouseove
- Java方法重写(Override)与重载(Overload)的区别(超详细)首页在我们要学习这个知识点之前,应该要先了解什么是多态?在最初
- 实现 bean 初始化、摧毁方法的配置与处理spring支持我们自定义 bean 的初始化方法和摧毁方法。配置方式可以通过 xml 的 in
- 背景我们项目一开始的所有提示都是中文,后来要做国际化。发现项目中的带双引号的中文居然有 2.3 w 多条!!!简直让人欲
- 一、输入输出流对象cout:标准输出流cerr:标准出凑 和cout(只是用于如果是错误时要输出的)cin :&nb
- 本文实例为大家分享了java实现自动登录的具体代码,供大家参考,具体内容如下当你勾选(记住登录状态),用cookie保存用户名和密码。不勾选
- 简介我们知道Java中Collection接口下的很多集合都是线程不安全的, 比如 java.util.ArrayList不是线程安全的,
- 前言表之间的关系有几种:一对多、多对一、 一对一、多对多在多对一关系中,把多的部分拆成一个一个对象其实就是一对一关系,如账户和用户是多对一关
- 1.Java连接redisredis支持哪些语言可以操作 (去redis官网查询)1.1 使用Jedis (1)添加jedis依赖