android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序
一、PC电脑和Android模拟器访问及模拟器之间tcp/udp通信
http://orgcent.com/pc-android-emulator-socket/
先说说端口重定向所需要的telnet客户端安装:
windows:
安装telnet客户端。如果没有安装,可以在windows程序管理中的打开或关闭系统功能下找到telnet客户端菜单项来启用telnet客户端功能。
linux:
自行安装telnet客户端。
一、PC电脑不能直接访问Android模拟器系统的原因
Android系统为实现通信将PC电脑IP设置为10.0.2.2,自身为10.0.2.15/127.0.0.1。然而PC电脑并没有为Android模拟器系统指定IP,所以PC只能通过端口重定向来实现和Android模拟器的通信。
二、PC电脑和Android模拟器系统之间通信
1、运行模拟器
2、打开window 命令行,执行:
5554是模拟器的端口(位于Android模拟器窗口标题栏),执行之后会进入android console
3、在console下执行:
例如:redir add udp:2888:2888
redir add tcp:2888:2888
执行此命令之后,会把PC 2888 端口接收到的tcp/udp数据转到模拟器的2888端口。
三、多个Android模拟器系统之间通信
1、启动模拟器emulator-5554和emulator-5556
2、打开dos窗口执行telnet localhost 5554连接到模拟器5554
3、成功连接后,继续执行:redir add tcp:5000:6000将PC端口5000绑定到模拟器5554的端口6000上。
4、此时模拟器5556通过向PC电脑端口5000(即地址:10.0.2.2:5000)发送tcp/udp数据包跟模拟器5554通信。
5、同理根据步骤2、3来实现PC电脑对模拟器5556的端口转发。
添加成功后,我们可以用redir list命令来列出已经添加的映射端口,redir del可以进行删除。
相信只要理解了PC电脑和Android模拟器系统之间通信,便知道怎么实现多个模拟器之间通信。
二、http://japankn.iteye.com/blog/1744031
在本机上启动两个模拟器,本机(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一样。
Android模拟器Ping主机
众所周之Android模拟器采用的是Qemu,而整个模拟的内核是Linux,虽然没有x-windows界面和bash shell,但测试下基本的Linux Shell还是没有问题的,今天就在android emulator上玩回ping。
首先我们进入cmd或console状态下,使用cd命令进入Android SDK的Tools命令,可以输入adb shell这时候,这个时候从>变为了#,现在已经在linux shell中了,虽然Android平台没有vi这样的编辑器,但是执行些简单的命令比如cd、rmdir、mkdir还是没有问题,我们直接在Android模拟器中测试ping本机,如# ping localhost,看看返回如图:
[环境相关] 安卓模拟器ping局域网中的其他机器
获取android模拟器ip
public String getLocalIpAddress() {
try {
for (Enumeration<NetworkInterface> en =NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){
NetworkInterface intf = en.nextElement();
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();){
InetAddress inetAddress = enumIpAddr.nextElement();
if (!inetAddress.isLoopbackAddress()) {
return inetAddress.getHostAddress().toString();
}
}
}
} catch (SocketException ex) {
edit_show.append(ex.toString()+"\n");
}
return null;
}
android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序相关推荐
- java模拟器ip_android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序...
在本机上启动两个模拟器,本机(PC)和模拟器的信息如下: 大家可以看到,两个模拟器的IP地址都是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的. 获取模拟器名称: > ...
- Android中基于TCP协议的网络通信之使用Socket进行通信
TCP协议被称为一种端到端的协议.这是因为它为两台计算机的连接起到了重要作用:当一台计算机需要与另一台计算机进行接连时,TCP协议会他们之间建立一个连接:用于发送和接收数据的虚拟链路. TCP协议负责 ...
- 全国高新计算机模拟器,最新版:Android版本的PC计算机Windows模拟器(可以安装计算机软件)...
Android版本的PC计算机Windows(可以安装计算机软件)是可以在计算机侧安装的EXE程序! Bochs是x86硬件平台的开源.它可以模拟各种硬件配置. Bochs开源项目最近为Android ...
- Android客户端与PC服务器通过socket进行交互实例
一直以来对Android socket通信都很模糊,今天终于研究了一个网上的例子,自己又修改了下,算是对Android socket通信有点了解了. 下面是具体的代码,说明都在注释中了.需要注意的是, ...
- 计算机网络ip进制转换方法,IP地址与二进制之间的转换
IP地址与二进制之间的转换 在讨论如何进行IP地址与二进制之间的转换前, 有必要解释一下IP地址与二进制的概念 IP IP协议是网络层的一个协议, 是能使连接到网上的所有计算机网络实现相互通信的一套规 ...
- Android通过反射EthernetManager Api设置以太网为静态IP地址或者动态获取IP
一.对于一些工控行业的Android主板一般都会扩展个以太网接口,也就是可以插网线进行上网:然后在系统设置页面有个以太网菜单可以进行IP.网关等设置,如下: 二.那怎么通过代码去设置呢? 1.Andr ...
- IP地址与二进制之间的转换
IP地址与二进制之间的转换 在讨论如何进行IP地址与二进制之间的转换前, 有必要解释一下IP地址与二进制的概念 IP IP协议是网络层的一个协议, 是能使连接到网上的所有计算机网络实现相互通信的一套规 ...
- IP地址,子网掩码,网关,DNS之间关系
说来惭愧大学里的计算机网络忘得差不多了,由于公司项目需求要自定义网络协议.由于之前开发都是用第三方包很少去写底层的网络协议,所以一起来学习吧!今天这篇文章基本上是从百度里面转载过来的如下: https ...
- IP地址(A、B、C、D和E类)、网络地址、主机地址、子网掩码与网关之间的关系
"IP地址"就相当于"电话号码",而Internet中的路由器,就相当于电信局的"程控式交换机". 点分十进制数表示的IPv4地址被分为几类 ...
最新文章
- STM32的串口函数_库函数USART_SendData问题和解决方法--硬件复位导致第一个字节丢失
- AI:《Why is DevOps for Machine Learning so Different?—为什么机器学习的 DevOps 如此不同?》翻译与解读
- matlab中数组创建方法
- qt 复制字符串_Qt字符串处理 QString用法总结(一)
- gamma校正_Log与Gamma校正视频
- Leetcode每日一题:148.sort-list(链表排序)
- 重识JavaScript 之 数据类型的相互转换
- python3视频教程哪个好_python3入门视频教程
- win10你的设备遇到问题,需要重启的五种解决方法
- 20155313 杨瀚 《网络对抗技术》实验一 PC平台逆向破解(5)M
- SpringBoot邮件发送
- pygame实现 飞机大战-第三版-仿写版
- 教你如何给小米5续命
- 移动磁盘显示盘符但无法打开,提示格式化
- Java--Mac系统终端编译运行java文件
- ChunJun 1.16 Release版本即将发布,bug 捉虫活动邀您参与!
- 【CSS-定位和浮动】
- 网络io和磁盘io cpu_在Windows 7中使用任务栏仪表监视CPU,内存和磁盘IO
- 面试过程中的排列组合和趣味性题目一
- Redis主从复制(薪火相传模式 演示示例)——图解版
热门文章
- 2020中国高校计算机大赛网络技术挑战赛,【科研竞赛】2020年度“中国高校计算机大赛-网络技术挑战赛”...
- 直播平台软件开发的前端如何实现整套视频直播技术流程
- 大数据技术与应用实训心得_数据实习心得
- Kotlin Contract(契约)
- 249、海康8700监控服务平台如何配置手机远程访问
- 查看linux下dhcp服务器分配出去的IP地址及剩余IP地址
- bzoj3398 [Usaco2009 Feb]Bullcow 牡牛和牝牛
- python自动化客户端_如何使用Python自动化登录客户端,pywinauto确实很强大
- 360浏览器,怎么开启无图片模式,在开热点的时候,省流量
- 腾讯开放平台 手机QQ登录 错误码:110406 解决办法