2012-01-31 51 views

回答

5

我認爲這是相同的,因爲它始終是,從HTTPServletRequest#getRemoteAddr()搶IP這樣的:

public class WSServlet extends WebSocketServlet { 

    ... 
    ... 

    @Override 
    public WebSocket doWebSocketConnect(HttpServletRequest req, String str) { 
     System.out.println("IP: "+ req.getRemoteAddr()); 
     ... 
    } 
} 
0

如果你需要它的認證的目的,你可以這樣說:

這只是一個例子:

@Override 
public boolean canPublish(BayeuxServer server, ServerSession client, 
          ServerChannel channel, ServerMessage messsage) { 
    // 
    BayeuxContext context=server.getContext(); 
    System.out.println(context.getRemoteAddress()); 
    return true; 
} 

請記住,getRemoteAddress返回一個字符串InetSocketAddress。所以,你也有港口,這看起來是這樣的:

/79.111.111.22:49372 
0

沒有WebServletSocket:

public static String getClientIp(Session session) { 
     String ip = session.getUserProperties().get("javax.websocket.endpoint.remoteAddress").toString(); 
     int i1 = ip.indexOf("/"); 
     int i2 = ip.indexOf(":"); 
     return ip.substring(i1 + 1, i2); 
    } 
+0

這不使用IPv6地址的工作。更好的是InetSocketAddress ip =(InetSocketAddress)session.getUserProperties()。get(「javax.websocket.endpoint.remoteAddress」); return ip.getAddress()。getHostAddress(); – Horcrux7 2016-11-24 12:54:03

相關問題