zoukankan      html  css  js  c++  java
  • java获取ip地址慢,webSocket获取ip


    java 中 InetSocketAddress

    remoteAddress.getHostName() //获取hostName时耗时长,改方法要慎用;(先从本地取,如果本地没取到从远程dns中取)
    remoteAddress.getAddress().getHostAddress() ; //改用这种方式获取ip

    public class WebsocketUtil {

    public static InetSocketAddress getRemoteAddress(Session session) {
    if (session == null) {
    return null;
    }
    Async async = session.getAsyncRemote();

    //在Tomcat 8.0.x版本有效
    // InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#sos#socketWrapper#socket#sc#remoteAddress");
    //在Tomcat 8.5以上版本有效
    InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#socketWrapper#socket#sc#remoteAddress");
    return addr;
    }

    private static Object getFieldInstance(Object obj, String fieldPath) {
    String fields[] = fieldPath.split("#");
    for (String field : fields) {
    obj = getField(obj, obj.getClass(), field);
    if (obj == null) {
    return null;
    }
    }

    return obj;
    }

    private static Object getField(Object obj, Class<?> clazz, String fieldName) {
    for (; clazz != Object.class; clazz = clazz.getSuperclass()) {
    try {
    Field field;
    field = clazz.getDeclaredField(fieldName);
    field.setAccessible(true);
    return field.get(obj);
    } catch (Exception e) {
    }
    }

    return null;
    }

    }

     
    盛世岂埋凌云气,年少无为就努力
  • 相关阅读:
    centos6升级内核
    centos7启动盘制作
    sed匹配字符串并将匹配行的后几行注释
    cmd下调用xshell登录linux服务器
    centos清除历史命令
    yum错误Cannot retrieve metalink for repository: epel/x86_6
    ansible-playbook
    jdk升级到1.8
    shell瞎记录
    shell 循环
  • 原文地址:https://www.cnblogs.com/guangchuantang/p/14652219.html
Copyright © 2011-2022 走看看