zoukankan      html  css  js  c++  java
  • 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();
        } 
    }

     运行结果

  • 相关阅读:
    Java JMX 监管
    Spring Boot REST(一)核心接口
    JSR 规范目录
    【平衡树】宠物收养所 HNOI 2004
    【树型DP】叶子的颜色 OUROJ 1698
    【匈牙利匹配】无题II HDU2236
    【贪心】Communication System POJ 1018
    【贪心】Moving Tables POJ 1083
    Calling Extraterrestrial Intelligence Again POJ 1411
    【贪心】Allowance POJ 3040
  • 原文地址:https://www.cnblogs.com/zhujiabin/p/4740559.html
Copyright © 2011-2022 走看看