| Classification: | 
                                       Java | 
                                        Category:  | 
                                       java.net | 
                                     
                                    
                                       |  Created: | 
                                       01/09/2002 | 
                                        Modified: | 
                                       01/17/2002 | 
                                     
                                    
                                       |  Number: | 
                                       FAQ-0762 | 
                                     
                                    
                                       |  Platform: | 
                                       ER5, Symbian OS v6.0, Symbian OS v6.1 | 
                                     
                                   
                               | 
                            
                           Question: When the following class is run on Symbian OS, it prints out "localhost/127.0.0.1" whether or not an Internet connection has
                           been made. Why is this?  public class getLocalHost {  public static void main (String[] args) {  try {   System.out.println (java.net.InetAddress.getLocalHost());  }  catch (Exception e) {  System.out.println (e.getMessage());  }  }  }   
                        								 Answer:  This is a limitation of pJava on Symbian OS. The implementation of the getLocalHost() method inherited from Sun's shared code
                           does DNS lookup against the phone's host name. This strategy is problematic in the first place because, if an Internet connection
                           has not yet been established, no host name will be found, "localhost" will be substituted and 127.0.0.1 returned.   But there is a further problem in that, on Symbian OS, even if an Internet connection is established, a defect results in
                        no host name being reported and 127.0.0.1 is still returned. 
                        										  The work around for this problem is to open a socket and use the alternative socket-based API which allows the local IP address
                        to be extracted as follows:   try  {  Socket socket = new Socket("www.symbian.com", 80);   InetAddress localhost = socket.getLocalAddress();   System.out.println("Address of local host is " + localhost);  socket.close();   }  catch(Exception e)  {  System.out.println("Exception: " + e.getMessage());  } 
                        									  This strategy successfully returns the local IP address even when no prior Internet connection has been established: the
                        instantiation of the new Socket precipitates the connection. 
                        Unfortunately a defect in Symbian OS v5, fixed for v6.0, prevents even this from working. In that case a JNI-based utility
                           class com.symbian.devnet.util.Inet provides a work around method, essentially using the above approach but instantiating the socket in native code. This work
                           around for Symbian OS v5 can be obtained from http://www.symbian.com/developer/downloads/java_util.html. 
                         
                        Note added 27/5/2002: The remote IP address used in the published version of the Inet class to force an Internet connection is no longer valid.
                           The dlls provided therein should be replace by those in the attached zip, which connect instead to 212.134.93.203, the current
                           IP address for www.symbian.com. 
                         
                          
                         
                      |