作者:李波

实现网络五子棋时用到了两个设备间的Socket通信,如果使用真机调试比较麻烦,用两个模拟器之间进行通信会比较方便。

首先要获得的模拟器的IP地址

在本机上启动两个模拟器,emulator-5554,emulator-5556查看模拟器ip

在命令行窗口输入命令

adb –s emulator-5554 shell

getprop

找到一下两行:

[net.eth0.dns1]: [10.0.2.3]

[net.gprs.local-ip]: [10.0.2.15]

可以发现两个模拟器的IP地址完全一样,都为10.0.2.15,DNS都为10.0.2.3,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的。

模拟器提供了一个特殊的IP,这个IP地址为10.0.2.2,这个IP地址可以说等同于PC本机的IP地址127.0.0.1,所以,通过这个特殊的IP地址可以进行PC与模拟器之间的通信。

考虑模拟器作为主机的情况:

需要把模拟器的端口映射到PC的端口,通过连接PC端的端口来把请求重定向发送给,模拟器。

1)PC作为客户端,模拟器1为主机

2)模拟器2为客户端,模拟器1为主机

映射PC端口到模拟器端口的命令如下:

>adb –s emulator-5554 forward tcp:6665 tcp:6666

映射成功后,连接模拟器的端口6666就要通过连接PC的端口6665进行连接,客户端连接的IP必须为环路IP,不能使用本机IP,如 192.168.1.102,因为本机IP跟环路IP没有映射关系,所以发送到本机IP(192.168.1.102)的连接请求无法映射到 127.0.0.1的环路IP上,使用PC端程序作为客户端时,环路IP必须使用127.0.0.1,使用模拟器作为客户端时,环路IP使用 10.0.2.2,虽然两者是同一个环路IP,但是PC只能识别127.0.0.1,模拟器只能识别10.0.2.2。

3)如果要实现两个模拟器之间的相互通信,就必须每个模拟器都既为Server又为Client,并在PC机上映射为不同的端口。结构图如下

由于PC的本机IP(192.168.1.102)没有映射到环路IP,所以不能在Android真机与模拟器之间或者运行在两台PC的模拟器之间进行Socket通信,如果要实现连接,必须在作为服务器的PC上,运行一个用于数据中继的后台程序,进行数据的转发。

Android模拟器(simulator)把它自己作为了localhost,也就是说,代码中使用localhost或者127.0.0.1来访问,都是访问模拟器自己!这是不行的!

如果你想在模拟器simulator上面访问你的电脑,那么就使用android内置的IP 10.0.2.2 吧,10.0.2.2 是模拟器设置的特定ip,是你的电脑的别名alias

记住,在模拟器上用10.0.2.2访问你的电脑本机。

详细请参考Android文档android-sdk-windows\docs\guide\developing\devices\emulator.html下的Emulator Networking

Network Address Description

10.0.2.1 Router/gateway address

10.0.2.2 Special alias to your host loopback interface (i.e., 127.0.0.1 on your development machine)

10.0.2.3 First DNS server

10.0.2.4 / 10.0.2.5 / 10.0.2.6 Optional second, third and fourth DNS server (if any)

10.0.2.15 The emulated device's own network/ethernet interface

127.0.0.1 The emulated device's own loopback interface

java模拟器ip_Android模拟器的ip获取以及模拟器之间socket通信相关推荐

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

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

  2. linux socket ip层配置,Linux下Socket通信(TCP实现)

    近期在做的项目中,涉及到了进程间数据传输,系统的原本实现是通过管道,但是原有的实现中两个进程是在同一台机器,而且两个进程的关系为父子关系,而我们要做的是将其中一个进程移植到服务器上,因此两个进程要分开 ...

  3. java与C语言之间socket通信(java客户端 C服务端)

    直接贴代码 服务端C代码 server.c #include <stdio.h> #include <sys/types.h> #include <sys/socket. ...

  4. 获取android模拟器的IP地址,Android模拟器的ip获取以及模拟器之间socket通讯

    一.Android  获取本机Mac 地址方法:java 须要在AndroidManifest.xml文件中添加权限:android shell Java代码服务器 public String get ...

  5. JAVA基础知识之网络编程——-基于AIO的异步Socket通信

    异步IO 下面摘子李刚的<疯狂JAVA讲义> 按照POSIX标准来划分IO,分为同步IO和异步IO.对于IO操作分为两步,1)程序发出IO请求. 2)完成实际的IO操作. 阻塞IO和非阻塞 ...

  6. 用纯Java代码根据IP获取windows和linux的MAC物理地址

    一.环境介绍 1.最近在使用struts2和JSP开发web网页时,碰到一个问题,我需要在后台根据ip获取访问服务器的物理地址,然后进行其他业务处理,但是我发现我在后台没有对应的接口或函数能够满足我. ...

  7. 坦克大战--Java类型 ---- (3)实现socket通信

    一.实现思路 使用socket通信的一些方法来实现socket通信,客户端和服务端两边需要约定好通信的接口Port(尽量选高的),客户端需要服务端的IP地址,以实现数据交流. 同时,客户端和服务端需要 ...

  8. 使用socket通信本地电脑与阿里云服务器报错connection time out及解决方案(java语言)

    使用socket通信本地电脑与阿里云服务器报错connection time out及解决方案(java语言) 参考文章: (1)使用socket通信本地电脑与阿里云服务器报错connection t ...

  9. java模拟器ip_android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序...

    在本机上启动两个模拟器,本机(PC)和模拟器的信息如下: 大家可以看到,两个模拟器的IP地址都是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的. 获取模拟器名称: > ...

最新文章

  1. 从json到抽取关键词
  2. java从Object类型转换成double类型
  3. 【PAT乙级】1020 月饼 (25 分)
  4. C#中提示:System.Runtime.Serialization.SerializationException
  5. kaggle中安装lightgbm的gpu版本
  6. 阿里P7大牛亲自教你!BAT这种大厂履历意味着什么?积累总结
  7. 仲裁文件夹服务器,仲裁服务器是什么
  8. Linux工作笔记-ssh中-X属性的使用(Linux传界面)
  9. html里面注释浮动框,“浮动”注释与HTML / CSS / JavaScript /任何
  10. 基于bootstrap的时间选择插件daterangepicker以及汉化方法
  11. 问题2----网速问题?造成的ORA-01034和ORA-27101
  12. sql取整数_SQL 窗口函数
  13. 联想台式计算机 不启动u盘,联想电脑没有u盘启动项怎么办_联想电脑找不到u盘启动如何解决...
  14. 计算机大类专业分流问题,2019级计算机大类专业分流实施细则
  15. 百度地图api如何查询周边大学、商场等的个数?可实现翻页
  16. [深入研究4G/5G/6G专题-40]: URLLC-11-《3GPP URLLC相关协议、规范、技术原理深度解读》-5-5G Qos原理与架构: 切片、PDU会话、QosFlow、5QI、DRB
  17. 为何贩卖焦虑的文章如此受欢迎???
  18. Linux rpm 命令 【转】
  19. Android 12 Watchdog(1) 介绍与启动
  20. 【Python学习笔记】超详细Python快速入门教程(下)

热门文章

  1. 天数智芯亮相“2019 世界半导体大会”,宣布国内首款GPGPU芯片推出时间表
  2. 用mobilenet模型跑tensorflow CNN的样例:image_retrain.py和label_image.py
  3. Android Activity did not call finish() prior to onResume() completing
  4. BCD转换成bin格式
  5. Command line is too long. Shorten command line for XXXX.testXXX or also for JUnit defau......
  6. Spring Cloud Alibaba 视频教程分享
  7. Django 生成PDF(三)——关于RML
  8. 用python实现一元线性回归方法与区间估计
  9. C语言程序设计 | 程序编译与预处理
  10. 使用酷Q SDK开发QQ机器人