투케이2K

564. (Android/Java) [Android 13] Runtime getRuntime exec 커맨드 명령어 사용해 ping 핑 네트워크 상태 체크 실시 본문

Android

564. (Android/Java) [Android 13] Runtime getRuntime exec 커맨드 명령어 사용해 ping 핑 네트워크 상태 체크 실시

투케이2K 2023. 5. 23. 23:02

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java

 

[소스 코드]

 

        // -------------------------------------
        // [로직 처리 실시]
        // -------------------------------------
        Thread thread = new Thread(new Runnable() {
            @Override
            public void run() {

                try {

                    // [IP 주소 만들기]
                    String pingIp = "192.168.145.140";


                    // [핑을 날리면서 인터넷 사용 가능 체크]
                    Runtime runTime = Runtime.getRuntime();


                    // -----------------------------------------------------------
                    // TODO [디바이스 연결 상태는 빠르게 응답 받을 수 있으나, 모바일 응답은 대기 시간이 있어 타임 아웃 시간 늘려야 한다]
                    // [ip 는 test 하고 싶은 주소 삽입]
                    // [c = 패킷을 날릴 횟수]
                    // [W = 상대방이 응답을 주기까지 대기 시간 (Seconds)]
                    // [s = 전송 패킷 바이트 수]
                    // -----------------------------------------------------------
                    String cmd = "ping -c 1 -W 1 "+ pingIp;
                    // String cmd = "ping -s 10 -c 1 -W 1 "+ pingIp;
                    // String cmd = "ping -s 5 -c 1 "+ pingIp;

                    Process proc = null;
                    proc = runTime.exec(cmd);
                    proc.waitFor();


                    /**
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                        if (!proc.waitFor(30, TimeUnit.MILLISECONDS)) {
                            proc.destroy();
                        }
                    }
                    // */


                    // --------------------------------------------------------
                    // [여기서 반환되는 ping 테스트의 결과 값은 0, 1, 2 중 하나]
                    // [0 : 성공, 1 : fail, 2 : error]
                    // --------------------------------------------------------
                    int result = proc.exitValue();

                    switch (result){
                        case 0:
                            S_Log.w("Ping Test", "Ping Success : " + pingIp);
                            break;
                        case 1:
                            S_Log.e("Ping Test", "Ping Fail : " + pingIp);
                            break;
                        default:
                            S_Log.e("Ping Test", "Ping Error : " + pingIp);
                            break;
                    }

                }
                catch (Exception e){
                    S_Log.e("[ERROR] Ping (핑) 테스트", "Exception :: " + e.getMessage());
                }

            }
        });
        thread.start(); // [스레드 수행]

 

반응형
Comments