用java获得客户端的地理位置,实际操作代码分享

随着经济水平与科技水平的不断进步与发展,越来越多的人开始谋求更好的发展,主动学习更多的技术。而java,就是很多人最中意的选择之一。今天主要为大家展示一些用java获得客户端地理位置的主要操作代码,希望对大家有所帮助。

首先,我们都知道,以前把程式发布的Server IP都写成一个IP-Config文件。为了避免发布程式,每次都去更改IP-Config,或是在不同Server上发布程式更改IP-Config,然后把IP-Config的MXL中的信息融入到java程式中。也就是自动获取服务器IP。参考了很多function,如下。

代码1:

String serverIP = ServletActionContext.getRequest()
    .getServerName();

代码2:

String serverIP = request.getLocalAddr();

上面两种方法,获取的都是127.0.0.1/loaclhost这样不准确的地址,所以推荐下面几个function,简单易懂,而且做过测试,在Apache反向代理,多Server的负载均衡(轮询)的情况下都可以正常运行。

实例展示一、

public String getServerIp()
{
    try
    {
        Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces();
        InetAddress ip = null;
        while (netInterfaces.hasMoreElements())
        {
            NetworkInterface ni = (NetworkInterface) netInterfaces
                .nextElement();
            ip = (InetAddress) ni.getInetAddresses()
                .nextElement();
            SERVER_IP = ip.getHostAddress();
            if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() &&
                ip.getHostAddress()
                .indexOf(":") == -1)
            {
                SERVER_IP = ip.getHostAddress();
                break;
            }
            else
            {
                ip = null;
            }
        }
    }
    catch (SocketException e)
    {
        // TODO Auto-generated catch block  
        e.printStackTrace();
    }
    return SERVER_IP;
}

实例展示二、

public static String getLocalIP()
{
    InetAddress addr = null;
    try
    {
        addr = InetAddress.getLocalHost();
    }
    catch (UnknownHostException e)
    {
        // TODO Auto-generated catch block  
        e.printStackTrace();
    }
    byte[] ipAddr = addr.getAddress();
    String ipAddrStr = "";
    for (int i = 0; i < ipAddr.length; i++)
    {
        if (i > 0)
        {
            ipAddrStr += ".";
        }
        ipAddrStr += ipAddr[i] & 0xFF;
    }
    //System.out.println(ipAddrStr);     
    return ipAddrStr;
}

实例展示三、

package com.mo.util;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.URL;
import java.net.URLConnection;
import java.util.Map;
import com.alibaba.fastjson.JSON;
public class IpAddress
{
    /**

     * 传人一个ip返回一个地理位置

     * @param ip

     * @return

     */
    public static String changeIpToAddress(String ip)
    {
        Map < String, String > map = changeJsonToMap(getAddressByIp(ip));
        String country = revert(map.get("country"));
        String province = revert(map.get("province"));
        String city = revert(map.get("city"));
        return country + " " + province + "省 " + city + "市";
    }
    /**

     * 传人一个ip返回一个地理位置(只有省市)

     * @param ip

     * @return

     */
    public static String changeIpToAddressOnlyProAndCity(String ip)
    {
        Map < String, String > map = changeJsonToMap(getAddressByIp(ip));
        String province = revert(map.get("province"));
        String city = revert(map.get("city"));
        return province + " " + city;
    }
    /**

     * 传人ip地址,出来的是unicode编码的json数据

     * @return json字符串

     * @throws IOException

     */
    private static String getAddressByIp(String ip)
    {
        StringBuffer result;
        try
        {
            URL url = new URL("http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=" + ip);
            URLConnection conn = url.openConnection();
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
            String line = null;
            result = new StringBuffer();
            while ((line = reader.readLine()) != null)
            {
                result.append(line);
            }
            reader.close();
            return result.toString();
        }
        catch (IOException e)
        {
            System.out.println("ip没有找到");
        }
        return "无法找到ip地址";
    }
    /**

     * 将传人的JSON字符串封装为Map

     * @param json字符串

     * @return 封装了map的json的数据

     */
    private static Map < String, String > changeJsonToMap(String address)
    {
        Map maps = (Map) JSON.parse(address);
        return maps;
    }
    /**

     * 将unicode转换为文字

     * @param 传人一个unicode编码

     * @return 返回一个汉字

     */
    private static String revert(String str)
    {
        str = (str == null ? "" : str);
        if (str.indexOf("\\u") == -1) //如果不是unicode码则原样返回
            return str;
        StringBuffer sb = new StringBuffer(1000);
        for (int i = 0; i < str.length() - 6;)
        {
            String strTemp = str.substring(i, i + 6);
            String value = strTemp.substring(2);
            int c = 0;
            for (int j = 0; j < value.length(); j++)
            {
                char tempChar = value.charAt(j);
                int t = 0;
                switch (tempChar)
                {
                case 'a':
                    t = 10;
                    break;
                case 'b':
                    t = 11;
                    break;
                case 'c':
                    t = 12;
                    break;
                case 'd':
                    t = 13;
                    break;
                case 'e':
                    t = 14;
                    break;
                case 'f':
                    t = 15;
                    break;
                default:
                    t = tempChar - 48;
                    break;
                }
                c += t * ((int) Math.pow(16, (value.length() - j - 1)));
            }
            sb.append((char) c);
            i = i + 6;
        }
        return sb.toString();
    }
}

以上就是关于用java获得客户端的地理位置的实际操作代码分享了。如果你对java知识感兴趣,想要了解更多java程序代码例子,敬请关注奇Q工具网。

推荐阅读:

如何用java获取IP地址?具体操作展示

java抽象类经典实例分享

Java多态性,重写怎样实现多态性?