今天用到websocket,希望服务器端在连接建立时获取到客户端的IP,看了源码没有找到提供的api,后来一顿百度,在stackoverflow 找到了解决方案,经过测试可以使用,总结了一下, 下边是代码:
import java.lang.reflect.Field; import java.net.InetSocketAddress; import javax.websocket.RemoteEndpoint.Async; import javax.websocket.Session; public class WebsocketUtil { public static InetSocketAddress getRemoteAddress(Session session) { Async async = session.getAsyncRemote(); // InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#sos#socketWrapper#socket#sc#remoteAddress"); InetSocketAddress addr = (InetSocketAddress) getFieldInstance(async,"base#socketWrapper#socket#sc#remoteAddress"); private static Object getFieldInstance(Object obj, String fieldPath) { String fields[] = fieldPath.split("#"); for (String field : fields) { obj = getField(obj, obj.getClass(), field); private static Object getField(Object obj, Class<?> clazz, String fieldName) { for (; clazz != Object.class; clazz = clazz.getSuperclass()) { field = clazz.getDeclaredField(fieldName); field.setAccessible(true);
调用测试:
public void onOpen(Session session) { InetSocketAddress remoteAddress = WebsocketUtil.getRemoteAddress(session); System.out.println("有新连接加入!" + remoteAddress);
输出结果:

|