본문 바로가기
Development/Android

[안드로이드]도메인으로 IP주소 찾기 (InetAddress)

by True Life 2015. 12. 29.


안드로이드-도메인으로 IP주소 찾기 (InetAddress)


, 참 오랜만의 개발 관련 포스팅입니다. 이유는.. 개발중 찾기 어려운 에러들이 튀어나와서 정말 삽질 좀 했습니다^^;

오늘은 네트워크 관련 포스팅 해보도록 하겠습니다. 그리고 런타임에러 디버깅(구글링) Tip도 드릴께요. 시작합니다!


1. InetAddress 클래스


후, 사실 이번 포스팅은 별거 없습니다. 그냥 클래스 하나 설명하고 끝입니다. 예제소스 하나 나갑니다.



InetAddress class는 별거 없어요. 간단하게 주요 메소드만 살펴볼게요~


 1. getAddress() : InetAddress 객체의 IP주소 반환

 2. getHostAddress() : IP주소 반환

 3. getHostAddress() : 호스트 이름을 문자열로 반환 (로컬로 따지면 Administrator(사용자명))

 4. getByName() : 도메인을 통한 객체 생성


자 위소스, 그대로 실행해 보았습니다. (여기서 Exception try catch는,, 굳이 설명 안하겠습니다;;)

결국 런타임 에러가 떳죠..



잠시만, 런타임 에러에서 정확한 구글링 키워드를 파악하는 법은.. 어렵지 않습니다.


 1. 첫번째 문장에 주목해라(구글링해라) - 거의 "메소드 명 + 에러문장" 하면 나오더라구요

 2. 아래로 가다보면.. 'Caused by'라는 문구, 이부분이 Exception의 핵심입니다.

 3. 그리고 에러들의 뒤에 보면 ***.java:551 같은 '에러발생 소스위치'가 잇죠, 그것도 주목하세요

   - 단, 여기서 'API'들의 소스위치는 갖다 버리시고 본인 소스.java:nnn을 읽어보세요


05-19 14:22:40.039: E/AndroidRuntime(1062):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
05-19 14:22:40.039: E/AndroidRuntime(1062):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
05-19 14:22:40.039: E/AndroidRuntime(1062):     at dalvik.system.NativeStart.main(Native Method)
05-19 14:22:40.039: E/AndroidRuntime(1062): Caused by: android.os.NetworkOnMainThreadException
05-19 14:22:40.039: E/AndroidRuntime(1062):     at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1099)
05-19 14:22:40.039: E/AndroidRuntime(1062):     at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
05-19 14:22:40.039: E/AndroidRuntime(1062):     at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)


2. 네트워크 통신을 위한 프로그램→"비동기화"


자, 어려운말 나옵니다. '비동기화',,!

별거 없어요 "그 네트워크 과정을 위한 쓰레드를 하나 더 생성해라"

쓰레드를 모르시는 분들이 있다면 잠깐 읽어보고 오세요~


[자바]쓰레드-Thread 




자, 아무튼 네트워크 통신을 하려면 쓰레드를 하나 더 만들어야됩니다.

그 이유는 통신 응답이 올때까지 메인쓰레드가 기다릴수가 없습니다..! (먹통되버림)

흠.. 자바에서는 Thread를 사용하겠지만, 안드로이드에서는 AsyncTask를 대부분 사용합니다.

무슨 클래스 하나만 포스팅하는데 런타임에러가 나오고 이제 또 다른 클래스까지 나올까요..!


 그러게요 X발.. 이게 개발의 묘미 아니겠습니까..


필요없는 설명 건너뛰고 바로 소스로 갑니다.



AsyncTask는 쓰레드를 하나 더 만들어주는 그런.. 클래스입니다.

자, 좀만 더 부연 설명 하겠습니다.


 AsyncTask는 메인쓰레드~서브쓰레드의 핸들링까지 다뤄줘버리는 쓰레드의 완전체, 완벽한 클래스!


한마디로.. Thread+Handler = AsyncTask로 이해하세요

이거 하나로 편하게 UI를 수정할 수 있고 Background 작업도 진행합니다.

핸들러 모르시는 분들은 참고하시고.. 위와 같이 extends를 통해 선언을 했는데 사용도 해봅시다.


[안드로이드]핸들러-Handler


아래는 메인쓰레드에서의 사용입니다.


저는 객체를 일일히 생성하고 의미를 부여하는걸 귀찮아해요. 그래서.. 한번에 써봤습니다.

실행하고(excute), 그것의 return값을 받아라(get) - String return


자, 완성됬습니다.. 그래도 에러가 뜨시는 분들 있죠..


3. <"android.permission.INTERNET">


네트워크 관련 두 가지만 더 설명할께요..



이 에러는.. 대개 <uses-permission android:name="android.permission.INTERNET" /> 이 한마디 문장 때문에 나타납니다.

 - AndroidManifest.xml


가운데 사이에 permission 추가 되어있는거 보이시나요? 추가해주세요


4. www


 도메인으로 IP 검색이 그래도 안되신다면.. www를 빼고 해보시기 바랍니다.


- 감사합니다 -



'Development > Android' 카테고리의 다른 글

[안드로이드]핸들러-Handler  (0) 2015.12.17