투케이2K

896. (Android/Java) [간단 소스] UDP 소켓 통신 클라이언트 - 메시지 송신 및 수신 확인 : DatagramSocket mSocket 본문

Android

896. (Android/Java) [간단 소스] UDP 소켓 통신 클라이언트 - 메시지 송신 및 수신 확인 : DatagramSocket mSocket

투케이2K 2024. 11. 17. 10:54

[개발 환경 설정]

개발 툴 : AndroidStudio

개발 언어 : Java / Kotlin

 

[소스 코드]

 

// --------------------------------------------------------------------------------------
[개발 및 테스트 환경]
// --------------------------------------------------------------------------------------

- 언어 : Java

- 개발 툴 : Android Studio

- 구분 : 간단 소스

// --------------------------------------------------------------------------------------






// --------------------------------------------------------------------------------------
[소스 코드]
// --------------------------------------------------------------------------------------

    // ------------------------------------------------------------------------------------------
    // TODO [SEARCH FAST] : [기기 등록 요청 실시 >> 응답 결과 확인]
    // ------------------------------------------------------------------------------------------
    public synchronized HashMap request_Device_Reg(DatagramSocket mSocket, String serverIp, int serverPort) {
        S_Log._D_(ACTIVITY_NAME + " :: request_Device_Reg :: 기기 등록 요청 수행", new String[]{
                "SERVER_IP :: " + String.valueOf(serverIp),
                "SERVER_PORT :: " + String.valueOf(serverPort)
        });

        /**
         * // ----------------------------------------
         * TODO [REQUEST] : [APP >> DEVICE]
         * // ----------------------------------------
         *
         * {
         *   "reg_name" : "TOWK"
         * }
         *
         * // ----------------------------------------
         * */


        /**
         * // ----------------------------------------
         * TODO [RESPONSE] : [DEVICE >> APP]
         * // ----------------------------------------
         *
         * {
         *   "result" : true
         * }
         *
         * // ----------------------------------------
         * */



        // -----------------------------------------------
        // [리턴 변수 선언]
        // -----------------------------------------------
        HashMap<String, Object> returnData = new HashMap<>();



        // -----------------------------------------------
        // [로직 처리 수행]
        // -----------------------------------------------
        try {

            // -----------------------------------------
            // TODO [DatagramSocket 널 체크 수행] : mSocket = new DatagramSocket();
            // -----------------------------------------
            if (mSocket == null){
                returnData.put(RETURN_SUCCESS_FLAG, false);
                returnData.put(RETURN_ERROR_MESSAGE, "Error :: DatagramSocket Is Null");
                return returnData;
            }
            // -----------------------------------------



            // -----------------------------------------
            // TODO [App To Device] : [디바이스 등록 요청 실시]
            // -----------------------------------------
            JSONObject reqJson = new JSONObject();
            reqJson.put("reg_name", "TWOK");

            String requestData = reqJson.toString();
            byte[] requestByte = requestData.getBytes(StandardCharsets.UTF_8); // [UTF-8 형식 바이트]

            S_Log._D_(ACTIVITY_NAME + " :: request_Device_Reg :: [요청] :: [APP] >> [DEVICE] :: 기기 등록 요청 수행", new String[]{
                    "REQUEST [STRING] :: " + requestData.toString(),
                    "REQUEST [BYTE] :: " + Arrays.toString(requestByte)
            });

            DatagramPacket requestPacket = new DatagramPacket(requestByte, requestByte.length, InetAddress.getByName(serverIp),serverPort);
            mSocket.send(requestPacket); // [IP, PORT 지정 패킷 전송]

            // -----------------------------------------



            // -----------------------------------------
            // TODO [Device To App] : [디바이스 정보 응답 확인 실시]
            // -----------------------------------------
            byte[] responseByte = new byte[6144];

            DatagramPacket responsePacket = new DatagramPacket(responseByte, responseByte.length);
            mSocket.receive(responsePacket); // [응답 값을 저장할 저장소 지정]

            // [byte to string 변환]
            String jsonString = C_Util.getByteToString(responsePacket.getData());

            //String jsonString = new String(responsePacket.getData(), "UTF-8");
            //jsonString = jsonString.replaceAll(" ", "");

            S_Log._D_(ACTIVITY_NAME + " :: request_Device_Reg :: [응답] :: [DEVICE] >> [APP] :: 기기 등록 응답 확인", new String[]{
                    "RESPONSE :: " + jsonString.toString()
            });

            // [리턴 데이터 삽입]
            returnData.put(RETURN_SUCCESS_FLAG, true);
            returnData.put(RETURN_ERROR_MESSAGE, "");

            // -----------------------------------------

        }
        catch (Exception e){
            S_Log._printStackTrace_(null, S_FinalData.LOG_BUG_STATE, null, e);

            // [에러 발생 데이터 삽입]
            returnData.put(RETURN_SUCCESS_FLAG, false);
            returnData.put(RETURN_ERROR_MESSAGE, "Exception :: " + String.valueOf(e.getMessage()));
        }


        // [리턴 반환 실시]
        return returnData;
    }
// --------------------------------------------------------------------------------------

 

반응형
Comments