윈도우에서 JAVA 로 IP 주소 가지고 오는소스는 아래와 같다.

[code]try {
    ip = InetAddress.getLocalHost().getHostAddress();
   } catch (UnknownHostException e) {
    e.printStackTrace();
}[/code]


그러나 이것을 리눅스에서 쓴다면 127.0.0.1 즉 루프백 아이피 주소가 나오게 된다.
어떻게 해야할까?
구글링결과 아래와같은 결론을 얻었다.

[code]try {
    boolean isLoopBack = true;
    Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
    while(en.hasMoreElements()) {
     NetworkInterface ni = en.nextElement();
     if (ni.isLoopback())
      continue;
     
     Enumeration<InetAddress> inetAddresses = ni.getInetAddresses();
     while(inetAddresses.hasMoreElements()) {
      InetAddress ia = inetAddresses.nextElement();
      if (ia.getHostAddress() != null && ia.getHostAddress().indexOf(".") != -1) {
       ip = ia.getHostAddress();
       isLoopBack = false;
       break;
      }
     }
     if (!isLoopBack)
      break;
    }
   } catch (SocketException e1) {
    e1.printStackTrace();
   }[/code]

NetworkInterface 라는 클래스를 이용하여 각 네트웍 인터페이스를 검색해서 알아내는 방법이다.
어찌되었건 이렇게 하면 윈도우건 리눅스건 돌아간다.
 
어째 자바스크립트가 된 기분이다.
이것은 자바의 철학인 WORA(Write Once Run Anyware) 를 위배한다.

앞으로 자바가 어떻게 발전할지는 모르겠지만 가장 기본적인 자바 철학은 지켜 주었으면 하는 바램이다.

'알짜정보 > Java' 카테고리의 다른 글

자바 힙덤프 뜨기  (69) 2012.12.18
JNLP 테스트  (36) 2010.02.14
apache 프로젝트의 commons-dbcp 를 이용하여 connection pool 만들기.  (42) 2008.08.15
java 에서 xmlrpc 사용하기  (38) 2008.07.13
annotation 주석?  (43) 2006.12.16
by cranix 2008. 12. 2. 00:15