之前写模拟器和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两个模拟器之间的通信相关推荐

  1. Android模拟器的ip获取以及模拟器之间socket通信

    作者:李波 实现网络五子棋时用到了两个设备间的Socket通信,如果使用真机调试比较麻烦,用两个模拟器之间进行通信会比较方便. 首先要获得的模拟器的IP地址 在本机上启动两个模拟器,emulator- ...

  2. java模拟器ip_Android模拟器的ip获取以及模拟器之间socket通信

    作者:李波 实现网络五子棋时用到了两个设备间的Socket通信,如果使用真机调试比较麻烦,用两个模拟器之间进行通信会比较方便. 首先要获得的模拟器的IP地址 在本机上启动两个模拟器,emulator- ...

  3. android fragment传递数据,Android 两个Fragment之间传递数据实例详解

    Android 两个Fragment之间如何传递数据 FragmentA启动FragmentB,做一些选择操作后,返回FragmentA,需要把FragmentB里面选择的数据传回来.有什么办法? F ...

  4. (转载) Android两个子线程之间通信

    Android两个子线程之间通信 标签: classthreadandroid子线程通信 2015-03-20 17:03 3239人阅读 评论(0) 收藏 举报  分类: 个人杂谈 版权声明:本文为 ...

  5. Activity——两个Activity之间的通信

    目录 两个Activity之间的通信 第一个Activity 第二个Activity 不积跬步,无以至千里:不积小流,无以成江海.要沉下心来,诗和远方的路费真的很贵! 两个Activity之间的通信 ...

  6. 【网络通信与信息安全】之深入解析两台主机之间的通信过程和原理

    一.前言 本文通过在 Docker 容器中执行命令,来深入了解两台主机之间的通信过程.阅读完本文,您将熟悉以下内容: Docker 的基本操作: 创建 socket 并发送 HTTP 请求: 路由表. ...

  7. STM32CubeMX(8)——利用HC-05实现两个单片机之间的通信

    利用HC-05实现两个单片机之间的通信 文章目录 利用HC-05实现两个单片机之间的通信 前言 一.硬件准备 二.软件介绍 三.利用软件使用AT指令修改蓝牙模块主从关系 1.设定两个蓝牙的主从关系 2 ...

  8. Android两个子线程之间通信

    Android中,相信主线程和子线程之间的通信大家都不陌生了吧.在一次面试经历中被问到了两个子线程之间是如何进行通信的.哎呦!这可蒙住我了.后来回家研究了下,分享给大家. 其实android中线程通信 ...

  9. Android两个Activity之间的接口回调

    最近在做个项目时需要在一个Activity中监听网络数据是否有更新,然后在另一个activity中更新,涉及到两个activity之间的接口回调,网上找了很多资料总算是弄出来了 首先定义一个监听接口 ...

最新文章

  1. linux常用命令 运算命令
  2. .NET Core 3 Preview 2 发布,C# 8 更强大的模式匹配
  3. Android控件学习笔记之 ListView
  4. Visual C#组件技巧之深入ComboBox美容
  5. 报表服务框架:WEB前端UI
  6. 公司git服务器记录
  7. 全网首发:分析及解决com.jogamp.opengl.GLException: J3D-Renderer-1: createImpl ARB n/a but required
  8. minicom 使用方法
  9. Web攻击手段-CSRF攻击及防御策略
  10. 如何查询网络出口IP
  11. 何同学采访苹果CEO库克上热搜,网友表示自愧不如
  12. [sicily]1484. 守望者的逃离
  13. 4.2-知识图谱在电商领域中的应用实践
  14. 召回率(Recall)
  15. Oracle ASMM和AMM
  16. 互联网公司常用术语简写
  17. SSH Tunnel隧道详解
  18. CPU的功能和基本组成
  19. Android基础之Fragment
  20. 软件设计师考试笔记-(10)

热门文章

  1. 每周一道算法题003:翻牌
  2. HTML-img图片标签
  3. 解决flex布局 space-between最后一行两边分布的问题
  4. 《2022大数据产业年度创新技术突破》榜重磅发布丨金猿奖
  5. 手把手教你如何快速发表论文
  6. 偷偷告诉你:21计算机考研一定要考这所985大学!
  7. java_day10作业
  8. MacOS Catalina终于来了!升级前先来看看有哪些亮点?
  9. 【目标检测】TT100K数据集使用,提取标注信息并转换成VOC格式的xml文件或yolo格式的txt文件
  10. 五个魔术子弹的方式来快速减肥