Notice
Recent Posts
Recent Comments
Link
투케이2K
892. (Android/Java) [유틸 파일] getSoftApDeviceIpAddress : 디바이스 와이파이 연결 및 소켓 통신 가능한 IP 주소 획득 본문
Android
892. (Android/Java) [유틸 파일] getSoftApDeviceIpAddress : 디바이스 와이파이 연결 및 소켓 통신 가능한 IP 주소 획득
투케이2K 2024. 11. 15. 18:26[개발 환경 설정]
개발 툴 : AndroidStudio
개발 언어 : Java / Kotlin
[소스 코드]
// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------
- 언어 : Java
- 개발 툴 : Android Studio
- 구분 : 유틸 파일
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------
// -----------------------------------------------------------------------------------------
// TODO [SEARCH FAST] : getSoftApDeviceIpAddress : 디바이스 와이파이 연결 및 소켓 통신 가능한 IP 주소 획득
// -----------------------------------------------------------------------------------------
public static String getSoftApDeviceIpAddress(Context mContext) {
/**
* // -----------------------------------------
* [getSoftApDeviceIpAddress 메소드 설명]
* // -----------------------------------------
* 1. 디바이스 와이파이 연결 및 소켓 통신 가능한 IP 주소 획득
* // -----------------------------------------
* 2. 호출 방식 :
*
* C_Wifi_Ap_Module.getSoftApDeviceIpAddress(A_Intro.this);
* // -----------------------------------------
* 3. 참고 :
*
* App To Device 간 AP 연결 후 소켓 통신 가능 IP 주소 예시 : 뒷자리 1 값
*
* 192.168.0.1
* 192.168.1.1
* 192.168.10.1
* // -----------------------------------------
* */
// [리턴 변수 선언]
String returnData = "";
String M_LOG = "";
// [로직 처리 수행]
try {
// TODO [휴대폰 와이파이 기능 활성 상태 확인]
if (mContext != null && C_StateCheck.isWifiConnected(mContext) == true){
// TODO [디바이스 IP 리스트를 담기 위한 배열 변수 선언]
ArrayList<String> ipList = new ArrayList<>();
// TODO [네트워크 리스트 목록 확인]
for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) {
NetworkInterface intf = en.nextElement();
//S_Log.w("Network", "getName :: " + intf.getName() + " / " + "toString :: " + intf.toString());
for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) {
InetAddress inetAddress = enumIpAddr.nextElement();
// S_Log.w("Address", "isLoopbackAddress :: " + inetAddress.isLoopbackAddress() + " / " + "getHostAddress :: " + inetAddress.getHostAddress());
// TODO [IPv6 형식 제외]
if (inetAddress instanceof Inet6Address){
continue;
}
// TODO [IP 주소 확인]
String ip = String.valueOf(inetAddress.getHostAddress());
ip = ip.trim();
// TODO [Null 인 경우 제외]
if (C_Util.stringNotNull(ip) == false){
continue;
}
// TODO [127.0.0.1 형식 인 경우 제외]
if (ip.equals("127.0.0.1") == true){
continue;
}
// TODO [1 차 검증 완료 IP 리스트 배열에 삽입]
ipList.add(ip);
}
}
S_Log.w("IP_LIST", String.valueOf(ipList));
// TODO [배열 값 Empty 여부 확인 및 App To Device 소켓 통신 가능한 IP 주소 확인]
if (ipList != null && ipList.size()>0){
try {
for (int i=0; i<ipList.size(); i++){
String getIp = ipList.get(i);
// [방어 로직] : . (닷) 포함이 안된 경우 제외
if (getIp.contains(".") == false){
continue;
}
// [방어 로직] : 192.168 형식이 포함 안된 경우 제외
if (getIp.contains("192.168") == false){
continue;
}
// [. (닷) 기준 파싱 수행]
String parseIp[] = getIp.split("\\.");
// [파싱 안된 경우 제외]
if (parseIp == null || parseIp.length != 4){
continue;
}
// TODO [IP 주소에서 마지막 형식 값 1로 변경] : 예시 - 192.168.0.1
parseIp[3] = "1";
returnData = String.format("%s.%s.%s.%s", parseIp[0], parseIp[1], parseIp[2], parseIp[3]);
}
}
catch (Exception es){
es.printStackTrace();
}
// TODO [소켓 통신 가능한 IP 주소 찾기 여부 확인]
if (C_Util.stringNotNull(returnData) == true){
M_LOG = "Success :: Found Ip Address";
}
else {
M_LOG = "Fail :: Not Found Ip Address";
}
}
else {
M_LOG = "Error :: ipList Size Is Null";
}
}
else {
M_LOG = "Error :: Context Is Null || Wifi Connected False";
}
}
catch (Exception e){
e.printStackTrace();
M_LOG = "Exception :: " + String.valueOf(e.getMessage());
}
// [로그 출력 실시]
//*
// ===============================================================
S_Log._D_("디바이스 와이파이 연결 및 소켓 통신 가능한 IP 주소 획득", new String[]{
"M_LOG :: " + String.valueOf(M_LOG),
"RETURN :: " + String.valueOf(returnData)
});
// ===============================================================
// */
// [리턴 반환]
return returnData;
}
// --------------------------------------------------------------------------------------
// --------------------------------------------------------------------------------------
[결과 출력]
// --------------------------------------------------------------------------------------
D///===========//: ================================================
I/: [LOG :: CLASS PLACE :: com.example.javaproject.C_Module.C_Wifi_Ap_Module.getSoftApDeviceIpAddress(C_Wifi_Ap_Module.java:1617)]
I/: ----------------------------------------------------
I/: [LOG :: NOW TIME :: 2024-11-15 10:55:02 금요일]
I/: ----------------------------------------------------
I/: [LOG :: DESCRIPTION :: 디바이스 와이파이 연결 및 소켓 통신 가능한 IP 주소 획득]
I/: ----------------------------------------------------
I/: [LOG :: M_LOG :: Success :: Found Ip Address]
I/: ----------------------------------------------------
I/: [LOG :: RETURN :: 192.168.0.1]
D///===========//: ================================================
// --------------------------------------------------------------------------------------
반응형
'Android' 카테고리의 다른 글
Comments