티스토리 뷰
TCP/IP 관련 프로젝트를 진행하다가 안드로이드를 서버로 사용해야 하는데, IP주소를 가져와야 클라이언트 측에서 Connect 할 수 있으므로 디바이스의 IP를 가져오는 코드를 찾던중에 아래와 같은 코드를 발견했는데, SDK의 문제인지 해당 코드가 안먹어서 Stack overflow를 참고하여 문제를 해결할 수 있었다.
비슷한 문제로 삽질하던 분에게 도움이 되길
안드로이드 개발코드 중, IP Address를 가져오데 가장 많이 이용되는 코드는 아래와 같습니다.
헌데, 그냥 Copy + Paste만 하면 싱거워서 약간의 해설을 달아봤습니다.
전체적인 코드와 주석은 아래와 같습니다.
//Device에 있는 모든 네트워크에 대해 뺑뺑이를 돕니다. for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { NetworkInterface intf = en.nextElement(); //네트워크 중에서 IP가 할당된 넘들에 대해서 뺑뺑이를 한 번 더 돕니다. for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { InetAddress inetAddress = enumIpAddr.nextElement(); //네트워크에는 항상 Localhost 즉, 루프백(LoopBack)주소가 있으며, 우리가 원하는 것이 아닙니다. //IP는 IPv6와 IPv4가 있습니다. //IPv6의 형태 : fe80::64b9::c8dd:7003 //IPv4의 형태 : 123.234.123.123 //어떻게 나오는지는 찍어보세요. if(inetAddress.isLoopbackAddress()) { Log.i("IPAddress", intf.getDisplayName() + "(loopback) | " + inetAddress.getHostAddress()); } else { Log.i("IPAddress", intf.getDisplayName() + " | " + inetAddress.getHostAddress()); } //루프백이 아니고, IPv4가 맞다면 리턴~~~ if (!inetAddress.isLoopbackAddress() && InetAddressUtils.isIPv4Address(inetAddress.getHostAddress())) { return inetAddress.getHostAddress().toString(); } } }
○ 추가적인 설명
1) IP를 찍어보면 아래와 같이 나오게 됩니다.
루프백(로컬호스트)에 대해 IPv6와 IPv4가 나옵니다.
그리고 연결된 LTE(rmnet0)에 대해서 IPv6, IPv4 역시 나오게 됩니다.[출처] [Android] IP Address 가져오기-해설포함|작성자 도발
이 부분에서 InetAddressUtils 가 import도 안되고 사용할 수 도 없었는데
if (!inetAddress.isLoopbackAddress() && inetAddress instanceof Inet4Address) {
return inetAddress.getHostAddress().toString();
}
이렇게 수정해서 완료할 수 있었다.
'안드로이드' 카테고리의 다른 글
[안드로이드] 텍스트에 그림자 넣기 + Error:(74, 31) Dimension types not allowed (0) | 2017.01.31 |
---|---|
안드로이드 : 리스트 뷰(ListView)와 어댑터 패턴(Adapter)에 대한 기초 개념정리 2 (0) | 2016.09.16 |
안드로이드 : 리스트 뷰(ListView)와 어댑터 패턴(Adapter)에 대한 기초 개념정리 1 (1) | 2016.09.16 |
안드로이드 스마트폰 루팅 2 : 루팅하는법(Kingo root 사용법) (5) | 2016.03.04 |
안드로이드 스마트폰 루팅 1 : 루팅! 알고하자 (0) | 2016.03.01 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
TAG
- 안드로이드
- C/C++
- 터미널
- 파이썬예제
- 디렉터리
- UML
- 프로세스
- 액터
- MFC
- C++
- 소켓 프로그래밍
- socket
- 티그널
- 파일
- 클래스
- 소켓
- 스레드
- 쓰레드
- 데이터베이스
- C
- 파이썬
- 정렬
- 유즈케이스
- 리눅스
- 티라노 시그널
- 자료구조
- 클라이언트
- 라즈베리파이
- Sort
- 악보
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
글 보관함