本机两个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一样。

相关文章
|
2月前
|
网络协议 物联网 虚拟化
|
2月前
|
网络协议 Shell 网络安全
解决两个 Android 模拟器之间无法网络通信的问题
让同一个 PC 上运行的两个 Android 模拟器之间能相互通信,出(qiong)差(ren)的智慧。
34 3
|
4月前
|
安全 网络安全 Android开发
安卓与iOS开发:选择的艺术网络安全与信息安全:漏洞、加密与意识的交织
【8月更文挑战第20天】在数字时代,安卓和iOS两大平台如同两座巍峨的山峰,分别占据着移动互联网的半壁江山。它们各自拥有独特的魅力和优势,吸引着无数开发者投身其中。本文将探讨这两个平台的特点、优势以及它们在移动应用开发中的地位,帮助读者更好地理解这两个平台的差异,并为那些正在面临选择的开发者提供一些启示。
132 56
|
4月前
|
安全 网络安全 Android开发
探索安卓开发之旅:从新手到专家网络安全与信息安全:防范网络威胁,保护数据安全
【8月更文挑战第29天】在这篇技术性文章中,我们将踏上一段激动人心的旅程,探索安卓开发的世界。无论你是刚开始接触编程的新手,还是希望提升技能的资深开发者,这篇文章都将为你提供宝贵的知识和指导。我们将从基础概念入手,逐步深入到安卓开发的高级主题,包括UI设计、数据存储、网络通信等方面。通过阅读本文,你将获得一个全面的安卓开发知识体系,并学会如何将这些知识应用到实际项目中。让我们一起开启这段探索之旅吧!
|
4月前
|
Java Android开发 Kotlin
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
Android项目架构设计问题之要在Glide库中加载网络图片到ImageView如何解决
42 0
|
4月前
|
Java Android开发 开发者
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
Android项目架构设计问题之使用Retrofit2作为网络库如何解决
77 0
|
4月前
|
Shell 网络安全 Python
网络工程师如何在ensp模拟器上玩python自动化配置交换机。
网络工程师如何在ensp模拟器上玩python自动化配置交换机。
259 0
|
4月前
|
网络协议 安全 网络安全
网络工程师如何在EVE模拟器用思科路由器配置GRE Over IPsec ?
网络工程师如何在EVE模拟器用思科路由器配置GRE Over IPsec ?
|
6月前
|
安全 网络协议 算法
Android网络基础面试题之HTTPS的工作流程和原理
HTTPS简述 HTTPS基于TCP 443端口,通过CA证书确保服务器身份,使用DH算法协商对称密钥进行加密通信。流程包括TCP握手、证书验证(公钥解密,哈希对比)和数据加密传输(随机数加密,预主密钥,对称加密)。特点是安全但慢,易受特定攻击,且依赖可信的CA。每次请求可能复用Session ID以减少握手。
68 2
|
6月前
|
缓存 网络协议 Android开发
Android网络面试题之Http1.1和Http2.0
HTTP/1.1 引入持久连接和管道机制提升效率,支持分块传输编码和更多请求方式如PUT、PATCH。Host字段指定服务器域名,RANGE用于断点续传。HTTP/2变为二进制协议,实现多工处理,头信息压缩和服务器推送,减少延迟并优化资源加载。HTTP不断发展,从早期的简单传输到后来的高效交互。
78 0
Android网络面试题之Http1.1和Http2.0