`
japankn
  • 浏览: 213261 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器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一样。

 

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;
}

  • 大小: 49.2 KB
分享到:
评论
1 楼 hello_player 2013-05-22  
问下,我本机有个html5的应用,我手机连在同一个无线路由器上,怎么打开地址可以看到这个应用?

相关推荐

    android x86模拟器和PC相互通信(socket)

    综上所述,实现Android模拟器和PC之间的Socket通信需要在PC端编写服务程序,Android端编写客户端程序,通过指定的IP地址和端口进行通信。确保Android应用有网络访问权限,处理好异常,以及正确地打开和关闭Socket...

    android socket编程源码—同一台PC的两个模拟器间的通信附详细文档

    本项目聚焦于在同一台PC上运行的两个Android模拟器之间的Socket通信,这对于开发和测试分布式应用程序或需要设备间通信的场景非常有用。以下是关于这个主题的详细解释: 一、Android Socket基础 Socket是网络通信的...

    android模拟器和pc机之间TCP通信

    本文将深入探讨如何在Android模拟器和PC机之间实现TCP通信。TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,广泛用于互联网上的数据通信。在这个场景中,我们将PC机设置为服务器,而...

    Android 模拟器之间通信问题

    在进行Android应用开发时,开发者经常需要在多个模拟器之间或模拟器与PC之间进行通信测试。这种通信能力对于评估应用在网络环境下的表现至关重要。本文将详细介绍如何实现Android模拟器间的通信,包括模拟器与PC之间...

    Android手机与pc的socket通信

    本文将详细探讨如何实现Android设备与PC之间的Socket通信。Socket,又称为套接字,是网络编程的基本组件,它提供了进程间通信的能力,使得运行在不同设备上的应用程序能够相互通信。 首先,我们需要理解Socket通信...

    android_两个模拟之间socket通信

    在Android开发中,有时我们需要在不同的设备或者模拟器之间实现数据交换,这通常可以通过网络通信来实现,其中最基础的方式之一就是使用Socket进行通信。本文将深入探讨如何在两个Android模拟器之间通过Socket进行...

    android模拟机与PC通信实例

    在Android模拟器中,与PC进行通信通常涉及到网络编程,主要使用的是Socket通信技术。这里的实例展示了如何在Android客户端和PC服务器端通过TCP/IP协议进行数据传输。下面将详细讲解这个过程。 首先,Android客户端...

    androidstudio实现socket通讯

    Android通过socket套接字实现网络连接,通过ip地址和ip端口实现访问服务器,从而实现客户端和服务器的连接,然后实现两者数据的互连

    Android应用源码安卓与PC的Socket通信项目java版及运行截图.rar

    在Android中使用Java进行Socket通信,首先需要创建一个Socket对象,指定服务器的IP地址和端口号。服务器端也需要启动一个ServerSocket监听特定的端口,等待客户端的连接请求。一旦客户端的Socket连接到服务器的...

    Android TCP Socket通信封装

    在Android模拟器上,我们可以使用像Soket.io这样的工具来模拟服务端,或者在电脑上运行一个简单的Java服务器程序,如Netty或自定义的Socket服务端。 总的来说,Android TCP Socket通信封装涉及以下几个关键点: - ...

    模拟器下的socket入门

    之后,对`sockaddr_struct`结构体`g_weather_ip_addr`进行了初始化,填充了目标IP地址和端口号,这里是移动网关的IP地址10.0.0.172和端口80,这表明了数据传输是通过移动网关进行的。如果是通过互联网直接连接,可能...

    基于TCP协议的Android模拟器间通信在教学中的应用研究.pdf

    解决办法之一是利用端口重定向技术,模拟器之间通过特殊的地址进行通信,这样即使IP地址相同,也能够区分出不同的模拟器设备进行通信。 研究还指出,TCP/Sockets在国内外的研究已取得较为成熟的成果。例如,物联网...

    android+pc socket通信.rar

    本文将深入探讨如何使用Android作为客户端,通过TCP Socket与PC进行通信。首先,我们需要理解TCP(Transmission Control Protocol)是一种面向连接的、可靠的传输协议,它保证了数据的顺序传输和错误检查。 在...

    TCP 客户端和服务器端模拟器

    "TCP客户端和服务器端模拟器"是开发者和学习者进行TCP通信实践的重要工具。它能帮助我们理解TCP的工作原理,测试网络应用的通信功能,并进行故障排查。 首先,我们要明白TCP客户端和服务器端的角色。TCP服务器端...

    Android应用源码安卓与PC的Socket通信项目java版.zip

    在本项目中,"Android应用源码安卓与PC的Socket通信项目java版.zip" 提供了一个实例,展示了如何使用Java编程语言在Android设备与个人计算机(PC)之间实现Socket通信。Socket是网络通信中的基本组件,它允许两个或...

    Android Socket TCP

    Socket,又称为套接字,是TCP/IP协议族中的编程接口,允许应用程序通过网络进行通信。在Android上实现Socket TCP通信,我们需要了解以下几个关键知识点: 1. **环境准备**: - **Eclipse**:这是一个历史悠久的...

    Modbus协议服务端模拟器 ModbusTcpServer1.zip

    Modbus协议是工业自动化领域广泛使用的通信协议,它允许设备之间进行简单而有效的数据交换。在本主题中,我们将深入探讨Modbus协议、其服务端模拟器以及如何使用C#编程语言来构建与之交互的客户端。 首先,让我们...

    tcp服务端&客户端模拟器

    通过调用`socket()`函数创建套接字,然后使用`bind()`函数将这个套接字与特定的IP地址和端口号绑定,这样其他客户端就可以通过这个地址和端口来连接服务器。 2. **监听连接请求**:服务器调用`listen()`函数进入...

    java socket 实现手机客户端与服务端通信

    Java Socket 是一种网络...总的来说,这个项目为学习如何在Android客户端和服务器之间使用Java Socket进行通信提供了一个实践平台。开发者可以通过理解这些概念并动手操作,加深对网络编程和Android应用开发的理解。

Global site tag (gtag.js) - Google Analytics