本机两个Android模拟器之间的网络通信

简介:
 

【本机(PC)IP以及Android模拟器IP的说明】

在本机上启动两个模拟器,本机(PC)和模拟器的信息如下:

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

获取模拟器名称:

>adb devices

List of devices attached

emulator-5554 device

emulator-5556 device

模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址可以说等同于PC本机的IP地址127.0.0.1 。所以,通过此特殊IP地址,实现PC本机与模拟器的通信是没有问题。

【PC-SERVER / 模拟器-CLIENT】

目的:通过7100端口跟服务器进行通信。

实施方法比较简单,直接按照下面的方法就可以了。

方法1:

PC-SERVER:

ServerSocket server = new ServerSocket(7100);

模拟器-CLIENT:

Socket socket = new Socket("192.168.1.3", 7100);

方法2:

PC-SERVER:

ServerSocket server = new ServerSocket(7100);

模拟器-CLIENT:

Socket socket = new Socket("10.0.2.2", 7100);

【模拟器-SERVER / PC-CLIENT】

目的:连接到服务器的7100端口。

实施操作稍微复杂一些,不能按照前面的方法来进行。要达到此目的,先要进行端口映射。

把本机端口TCP/6100映射到模拟器TCP/7100端口(UDP也是一样)。

>adb –s emulator-5554 forward tcp:6100 tcp:7100

端口映射成功后,再进行下面的实验。

方法1(正确):

模拟器-SERVER:

ServerSocket server = new ServerSocket(7100);

PC-CLIENT:

Socket socket = new Socket("127.0.0.1", 6100);

方法2(错误):

模拟器-SERVER:

ServerSocket server = new ServerSocket(7100);

PC-CLIENT:

Socket socket = new Socket("192.168.1.3", 6100);

错误原因是127.0.0.1是本机环路IP,跟本机IP没有映射关系,所以发送到本机IP的连接请求,无法映射到127.0.0.1的环路IP上。

由于这个原因,两台PC机上的模拟器之间,是无法进行网络连接的。如果要实现连接,只能在作为服务器的PC上,运行一个用于数据中继的后台程序,进行数据的转发。

【模拟器(5554)-SERVER / 模拟器(5556)-CLIENT】

目的:模拟器(5556)连接到模拟器(5554)的7100端口。

实施操作也相对复杂一些。要达到此目的,也要先进行端口映射。

把本机端口TCP/6100映射到模拟器(5554)TCP/7100端口(UDP也是一样)。

>adb –s emulator-5554 forward tcp:6100 tcp:7100

端口映射成功后,再进行下面的实验。

方法1(正确):

模拟器(5554)-SERVER:

ServerSocket server = new ServerSocket(7100);

模拟器(5556)-CLIENT:

Socket socket = new Socket("10.0.2.2", 6100);

原理说明:

模拟器(5556)通过连接10.0.2.2:6100,相当于连接本机(PC)的127.0.0.1:6100,由于本机IP的6100端口进行过端口映射,映射到模拟器(5554)的7100端口。所以,来自模拟器(5556)的连接请求会发送到模拟器(5554)上。实现了两个模拟器之间的网络通信功能。

此方法在本机调试时非常有用。

方法2(错误):

模拟器(5554)-SERVER:

ServerSocket server = new ServerSocket(7100);

模拟器(5556)-CLIENT:

Socket socket = new Socket("192.168.1.3", 6100);

错误原因跟【PC-CLIENT / 模拟器-SERVER】的方法2一样。

相关文章
|
17天前
|
存储 API Android开发
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
72 4
【02】完整的安卓二次商业实战-配置gradle-构建打包原生安卓项目-调试本地运行模拟器-优雅草伊凡
|
5月前
|
Linux 虚拟化 iOS开发
GNS3 v3.0.5 - 开源免费网络模拟器
GNS3 v3.0.5 - 开源免费网络模拟器
396 3
GNS3 v3.0.5 - 开源免费网络模拟器
|
7月前
|
API 数据处理 Android开发
Android网络请求演变:从Retrofit到Flow的转变过程。
通过这个比喻,我们解释了 Android 网络请求从 Retrofit 到 Flow 的转变过程。这不仅是技术升级的体现,更是反映出开发者在面对并发编程问题时,持续探索和迭求更好地解决方案的精神。未来,还会有更多新的技术和工具出现,我们期待一同 witness 这一切的发展。
199 36
|
5月前
|
Web App开发 缓存 JavaScript
Android网络小说阅读器的实现
小说阅读Demo,。此Demo使用Jsoup解析HTML,实现小说数据抓取(数据源自网络),并包含自定义View、六章小说缓存等功能,但未实现下载。项目还包括屏幕适配、字体设置等,借助第三方框架完成优化。以下是主页、详情页、阅读页等界面展示。
|
7月前
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
176 15
|
8月前
|
缓存 Java 测试技术
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
850 3
【01】噩梦终结flutter配安卓android鸿蒙harmonyOS 以及next调试环境配鸿蒙和ios真机调试环境-flutter项目安卓环境配置-gradle-agp-ndkVersion模拟器运行真机测试环境-本地环境搭建-如何快速搭建android本地运行环境-优雅草卓伊凡-很多人在这步就被难倒了
|
12月前
|
网络协议 物联网 虚拟化
|
12月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
197 3
|
安全 网络安全 Android开发
探索安卓开发之旅:从新手到专家网络安全与信息安全:防范网络威胁,保护数据安全
【8月更文挑战第29天】在这篇技术性文章中,我们将踏上一段激动人心的旅程,探索安卓开发的世界。无论你是刚开始接触编程的新手,还是希望提升技能的资深开发者,这篇文章都将为你提供宝贵的知识和指导。我们将从基础概念入手,逐步深入到安卓开发的高级主题,包括UI设计、数据存储、网络通信等方面。通过阅读本文,你将获得一个全面的安卓开发知识体系,并学会如何将这些知识应用到实际项目中。让我们一起开启这段探索之旅吧!
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
133 0

热门文章

最新文章