argszero wrote:
I use "String ip =request.getLocalAddr();". When the servlet was
request using url "http://localhost/servlet/XXXServlet" or "http://
127.0.0.1/servlet/XXXServlet",I can only get "127.0.0.1" which is not
the server public IP.How can get the public IP?
I believe that request.getLocalAddr() returns the IP address
use to connect with.
So if you connect to localhost you get localhost and if you connect to
the real host you get the real host.
This seems rather logical to me since the host may have no real
IP address or 10 real IP addresses
Assuming you have a newer Java version you can get all IP
addresses with:
Enumeration<NetworkInterface> e =
NetworkInterface.getNetworkInterfaces();
while(e.hasMoreElements()) {
NetworkInterface ni = e.nextElement();
Enumeration<InetAddress> e2 = ni.getInetAddresses();
while (e2.hasMoreElements()){
InetAddress ip = e2.nextElement();
// do something with ip.getHostAddress()
}
}
Arne
Thanks ,your solution works well when there is only one network card.