如何实现Android两个模拟器之间的通信
之前写模拟器和pc机通信没有遇到过多大问题,这两天想做一个把Socket通信的服务端和客户端都用Android模拟器实现,有点小麻烦,搜集一些资料,也试用很多方法,最后终于实现了模拟器之间的链接:
第一步:首先是创建两个模拟器:cmd下命令创建或在eclispe中创建avd都可以实现,这里不多说
第二步:启动两个模拟器
第三步:查看模拟器设备是否正常启动
在命令行中输入adb devices (前提启动模拟器)
第四步:选择一个模拟器作为服务器,假如选择emulator-5554 device, 客户端为emulator-5556 device
在cmd中执行如下命令:telnet localhost 5554 进入如下界面:
然后继续执行:redir add tcp:8192:8191 作下重定向
注意:如果telnet localhost 5554命令不识别时,请到控制面板安装Telnet客户端
第五步:编写服务端代码
public class MySocketServerActivity extends Activity {//坐标值float event_x=0;float event_y=0;public static final int SERVERPORT = 8191; //注意这里和上面重定向的配置是有关系的。 @Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(new MySurface(this));new MyServerThread().start();}@Overridepublic boolean onTouchEvent(MotionEvent event) {event_x=event.getX();event_y=event.getY();System.out.println("获得坐标["+event_x+","+event_y+"]");return super.onTouchEvent(event);}//启动服务器线程class MyServerThread extends Thread{@Overridepublic void run() {try { System.out.println("AAAAAAAAAAAAAAAA1");ServerSocket serverSocket = new ServerSocket(SERVERPORT);System.out.println("AAAAAAAAAAAAAAAA2");while (true) { Socket client = serverSocket.accept();//写入坐标值OutputStream os=client.getOutputStream(); OutputStreamWriter osw=new OutputStreamWriter(os);BufferedWriter bw=new BufferedWriter(osw);bw.write("服务器坐标信息:["+event_x+","+event_y+"]");bw.close();}}catch(Exception e) {System.out.println("S: Error");e.printStackTrace();} }}}
class MySurface extends SurfaceView implements SurfaceHolder.Callback{private SurfaceHolder holder;public MySurface(Context context) {super(context);holder= getHolder();holder.addCallback(this);}@Overridepublic void surfaceChanged(SurfaceHolder holder, int format, int width,int height) {}@Overridepublic void surfaceCreated(SurfaceHolder holder) {Canvas canvas=holder.lockCanvas();Paint paint=new Paint();paint.setColor(Color.RED);canvas.drawRect(10, 10, 150, 80, paint);paint.setColor(Color.WHITE);canvas.drawText("坐标测试区", 40, 30, paint);holder.unlockCanvasAndPost(canvas);}@Overridepublic void surfaceDestroyed(SurfaceHolder holder) {// TODO Auto-generated method stub}}
客户端代码:
public class MySocketClient extends Activity {@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);try {Socket socket = new Socket("10.0.2.2", 8192);//注意这里也是和上面重定向的配置是有关系的。而且这里的地址必须是10.0.2.2InputStream is=socket.getInputStream();InputStreamReader isr=new InputStreamReader(is);BufferedReader br=new BufferedReader(isr);String msg=br.readLine();Toast.makeText(this, "获取服务器传来的坐标:"+msg,Toast.LENGTH_LONG).show();} catch (UnknownHostException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();} }
}
启动服务端程序,启动客户端程序
注意:两个程序的AndroidManifest.xml都必须加上下面这个权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
如果想查看程序执行过程 :
在cmd中执行如下命令
执行 adb -s emulator-5554 shell
然后执行logcat,可以查看执行log信息
启动客户端:
如何实现Android两个模拟器之间的通信相关推荐
- Android模拟器的ip获取以及模拟器之间socket通信
作者:李波 实现网络五子棋时用到了两个设备间的Socket通信,如果使用真机调试比较麻烦,用两个模拟器之间进行通信会比较方便. 首先要获得的模拟器的IP地址 在本机上启动两个模拟器,emulator- ...
- java模拟器ip_Android模拟器的ip获取以及模拟器之间socket通信
作者:李波 实现网络五子棋时用到了两个设备间的Socket通信,如果使用真机调试比较麻烦,用两个模拟器之间进行通信会比较方便. 首先要获得的模拟器的IP地址 在本机上启动两个模拟器,emulator- ...
- android fragment传递数据,Android 两个Fragment之间传递数据实例详解
Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...
- (转载) Android两个子线程之间通信
Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报 分类: 个人杂谈 版权声明:本文为 ...
- Activity——两个Activity之间的通信
目录 两个Activity之间的通信 第一个Activity 第二个Activity 不积跬步,无以至千里:不积小流,无以成江海.要沉下心来,诗和远方的路费真的很贵! 两个Activity之间的通信 ...
- 【网络通信与信息安全】之深入解析两台主机之间的通信过程和原理
一.前言 本文通过在 Docker 容器中执行命令,来深入了解两台主机之间的通信过程.阅读完本文,您将熟悉以下内容: Docker 的基本操作: 创建 socket 并发送 HTTP 请求: 路由表. ...
- STM32CubeMX(8)——利用HC-05实现两个单片机之间的通信
利用HC-05实现两个单片机之间的通信 文章目录 利用HC-05实现两个单片机之间的通信 前言 一.硬件准备 二.软件介绍 三.利用软件使用AT指令修改蓝牙模块主从关系 1.设定两个蓝牙的主从关系 2 ...
- Android两个子线程之间通信
Android中,相信主线程和子线程之间的通信大家都不陌生了吧.在一次面试经历中被问到了两个子线程之间是如何进行通信的.哎呦!这可蒙住我了.后来回家研究了下,分享给大家. 其实android中线程通信 ...
- Android两个Activity之间的接口回调
最近在做个项目时需要在一个Activity中监听网络数据是否有更新,然后在另一个activity中更新,涉及到两个activity之间的接口回调,网上找了很多资料总算是弄出来了 首先定义一个监听接口 ...
最新文章
- linux常用命令 运算命令
- .NET Core 3 Preview 2 发布,C# 8 更强大的模式匹配
- Android控件学习笔记之 ListView
- Visual C#组件技巧之深入ComboBox美容
- 报表服务框架:WEB前端UI
- 公司git服务器记录
- 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required
- minicom 使用方法
- Web攻击手段-CSRF攻击及防御策略
- 如何查询网络出口IP
- 何同学采访苹果CEO库克上热搜,网友表示自愧不如
- [sicily]1484. 守望者的逃离
- 4.2-知识图谱在电商领域中的应用实践
- 召回率(Recall)
- Oracle ASMM和AMM
- 互联网公司常用术语简写
- SSH Tunnel隧道详解
- CPU的功能和基本组成
- Android基础之Fragment
- 软件设计师考试笔记-(10)