Android无法访问本地服务器(localhost)的解决方案

在Android开发中通过localhost或127.0.0.1访问本地服务器时,会报java.net.ConnectException: localhost/127.0.0.1:8083 -Connection refused异常。

为什么会报这个异常呢?因为Android模拟器本身把自己当做了localhost或127.0.0.1,而此时我们又通过localhost或127.0.0.1访问本地服务器,所以会抛出异常了。

在网上查了下,在模拟器上可以用10.0.2.2代替127.0.0.1和localhost;

另外如果是在局域网环境可以用192.168.0.x或者192.168.1.x(根据具体配置)连接本机。在局域网环境为了保守起见,我们可以通过Android代码来获取本机的IP,接下来就通过代码演示怎么获取Android能访问本地服务器的IP

第一步,在清单文件中加入以下权限

 <uses-permission android:name="android.permission.INTERNET" />
 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>

第二步,获取Android本机IP地址和MAC

package cn.itcast.test;

import java.net.InetAddress;
import java.net.NetworkInterface;
import java.net.SocketException;
import java.util.Enumeration;
import java.util.List;

import android.content.Context;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.test.AndroidTestCase;
import android.util.Log;
import cn.itcast.domain.Video;
import cn.itcast.news.MainActivity;
import cn.itcast.service.VideoService;

public class VideoServiceTest extends AndroidTestCase {
    private static final String TAG = "VideoServiceTest";

    public void testLocalIpAndMac(){
        Log.i(TAG, "IP: "+getLocalIpAddress()+", MAC: "+getLocalMacAddress());
    }

    /**
     * 获取Android本机IP地址
     *
     * @return
     */
    private 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) {
            Log.e("WifiPreference IpAddress", ex.toString());
        }
        return null;
    }

    /**
     * 获取Android本机MAC
     *
     * @return
     */
    private String getLocalMacAddress() {
        WifiManager wifi = (WifiManager) this.getContext().getSystemService(Context.WIFI_SERVICE);
        WifiInfo info = wifi.getConnectionInfo();
        return info.getMacAddress();
    }
}

运行结果

时间: 2024-12-15 01:42:36

Android无法访问本地服务器(localhost)的解决方案的相关文章

Android模拟器访问本地的localhost失败及解决方案

在开发手机网站是,使用Android模拟器测试,在手机浏览器中输入localhost访问本地服务器失败! 原因: 在Android系统中localhost就是127.0.0.1 在Windows系统中localhost也是127.0.0.1 Android模拟器(simulator)把自己作为了localhost,也就是说,代码中使用localhost或者127.0.0.1来访问,就是访问模拟器自己! 解决方案 1: 若是你想在模拟器simulator访问本地电脑,那么就用Android内置的I

[020] Android模拟器访问本地Web应用

本篇文章试图解决这样一个问题:如何在Android模拟器上访问本地的Web应用? 例如,在你的开发机器上启动一个Tomcat服务,接着打开电脑上的浏览器,默认情况下输入http://localhost:8080/就能够访问到Tomcat的主页面:那么,如果我们想在Android模拟器上来访问,可以吗?答案是肯定的,但是访问的URL会有所变化,这又是为什么呢?请继续往下看.         在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服

关于本地服务器localhost请求Forbidden解决办法

不知怎么的,今天下午,使用Telnet 访问 我电脑的本地Apache服务器时,使用GET方法HTTP请求本地服务器的文件,返回的一直都是HTTP/1.1 403 Forbidden使用其他的请求方法,得到的依旧是403,如图所示 : 面对这个问题,刚开始有点毫无头绪,理论上是不可能会出现这种问题的,因为我直接用浏览器可以正常访问本地服务器,后来细心想一想,觉得问题可能出现在Apache阿帕奇服务器的配置上面,于是开始在服务器的目录总一个一个的找配置文件,读配置文件,在D:\wamp\bin\a

Android客户端与本地服务器Socket通信

Android客户端与本地服务器Socket通信 Socket服务器运行结果图?? 一.客户端和服务器端的选择: 客户端是我们手机端,关于服务器端,只要安装了JDK,自然就拥有通讯的功能,我们只需要在Eclipse或者MyEclipse中写好文章中服务器端的代码,运行起来即可,用accept()方法启动服务器端,等待客户端的连接,在未连接的情况下,服务器端处于堵塞的状态. 二.客户端注意事项 andriod客户端添加网络访问权限 <uses-permission android:name="

ngrok实现本地项目外网访问(微信公众平台访问本地服务器)

最近在做微信公众号开发,微信坑爹的只支持80端口,而公司的80端口一直被另一项目占着,于是百度如何访问本地服务器,最终找到了ngrok反向代理,详见百度百科(其实也不详细) 首先,进入ngrok官网:https://ngrok.com/下载点击download(图1),然后选择自己所需的版本(图1) 图1 第二步:进入https://ngrok.com/user/signup,填写信息进行注册(图3),登录后会看到有一个授权码(图3,4) 授权码作用后面会讲到 图3 图4 第三步:将第一步中下载

android系统AES解密服务器加密数据错误解决方案

之前的做了一个外包项目,里边有一些敏感的信息需要AES加密,但是同样的代码在服务器就可以加密解密,在android系统中就解密失败,会出现pad block corrupted错误,下面给出解决方案, 亲测无问题! AES.java public class AES { public static final String VIPARA = "0123456789abcdef"; public static final String bm = "UTF-8"; pu

Android真机调试访问本地服务器(localhost)的解决方案

Android系统把它自己作为了localhost!当连接localhost都是他自己啊.. 囧,在这里晕了好久才发现.. 网上介绍的都是模拟器连接本地服务器的,我试着把链接改为http://10.0.2.2/依然不可以..我是真机调试,不是模拟器,那怎么办呢? 解决方法 我的环境是用手机通过WIFI上网,和本地电脑在同一个局域网内.找出本地电脑的ip即可,手机可以直接访问这个IP. 如果不是在局域网内,只能把网页放到可以给外部访问的地方了(例如服务器)

Android模拟器访问本地Web应用

本篇文章试图解决这样一个问题:如何在Android模拟器上访问本地的Web应用? 例如,在你的开发机器上启动一个Tomcat服务,接着打开电脑上的浏览器,默认情况下输入http://localhost:8080/就能够访问到Tomcat的主页面:那么,如果我们想在Android模拟器上来访问,可以吗?答案是肯定的,但是访问的URL会有所变化,这又是为什么呢?请继续往下看.        在一般的Java Web程序开发中,我们通常使用localhost或者127.0.0.1来访问本机的Web服务

手机如何访问本地服务器Tomcat

首先要保证手机与自己的笔记本在同一个局域网中,其次要保证开放了服务器的端口号. 本文以win8为例 1.确认手机和笔记本在同一个局域网中: Win + R 打开"运行",输入"cmd"回车,然后输入"ipconfig"命令,找到如图所示的IP地址: 2.开放服务器的端口号(我的tomcat开启的是8080端口,这个根据自己的配置来设置); 可以参考:https://jingyan.baidu.com/article/e9fb46e19ff8137