마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

Android 소켓 연동 이 안되는 이유

0 추천

안녕하세요 소켓연동을 구현을 했는

 try {
            mSocket = IO.socket("http://10.0.2.2:3000")

            mSocket.connect()
            mSocket.emit("setting", token)
            Log.d(TAG, "onCreate: 소켓연결 성공")
            //서버에 신호 보내는거같음 밑에 에밋 리스너들 실행
            //socket.on은 수신
            mSocket.on("sendMessage", sendMessage)


            val json = JSONObject()
            json.put("token", token)
            mSocket.emit("connects  ", json)
            val userId = JSONObject()
            userId.put("token", token)
            userId.put("roomId", args.groupId)
            //socket.emit은 메세지 전송임
            mSocket.emit("join", userId)
        } catch (e: JSONException) {
            Log.d(TAG, "onCreate:  에러 ${e}")
            e.printStackTrace()
        }

        hasConnection = true

        chat_Send_Button.setOnClickListener {
            //아이템 추가 부분
            sendMessage()

        }
    }


    private fun getToken() {
        signViewModel.readToken.asLiveData().observe(this) {
            token = it.token
        }
    }

    private fun setAdapter() {
        binding.studyMeetingRecyclerView.apply {
            adapter = mAdapter
            showVertical(context)
        }
    }


    private var sendMessage: Emitter.Listener = Emitter.Listener { args ->
        runOnUiThread {
            Log.e("socket", "sendMessage return : $${args[0]}")
            val data = args[0] as JSONObject
            val name: String
            val message: String
            val profile_image: String
            try {
                Log.e("socket", "sendMessage return : $data")
                name = data.getString("name")
                message = data.getString("message")
                profile_image = data.getString("profileImg")

                val format = ChatModel(name, message, profile_image, "null")
                mAdapter.addItem(format)
                mAdapter.notifyDataSetChanged()
                Log.e("new me", name)
            } catch (e: Exception) {
                Log.d(TAG, "onNewMessage: 에러 ${e} ")
                return@runOnUiThread
            }
        }
    }


    // send button 을 누르면 server 에 있는 sendMessage 가 호출된다.
    private fun sendMessage() {


        val message = binding.messageEdit.text.toString().trim { it <= ' ' }
        if (TextUtils.isEmpty(message)) {
            return
        }
        binding.messageEdit.setText("")
        val jsonObject = JSONObject()
        try {
            Log.d(
                TAG,
                "sendMessage: message  ${message} groupId : ${args.groupId} token : ${token}"
            )
            jsonObject.put("token", token)
            jsonObject.put("roomId", args.groupId)
            jsonObject.put("message", message)
            mSocket.emit("sendMessage", jsonObject)

        } catch (e: JSONException) {
            Log.d(TAG, "sendMessage: 에러 ${e}")
            e.printStackTrace()
        }
        Log.d("socket", "sendMessage : object $jsonObject")


    }

    override fun onDestroy() {
        super.onDestroy()
        mSocket.disconnect()
    }

데 서버에 로그를 찍어봐도 데이터가 안넘어가고 연동이 안되는 것 같습니다.

에러도 안뜨고 뭐가 문제인지 모르겠어요 ㅠㅠ

hifl (670 포인트) 님이 2021년 11월 23일 질문
한번 시도해 보도록 하겠습니다 !
Unable to connect to NodeJS server" 이 뜨는걸 보니 서버와 제대로 연결이 안되어 있엇던것 같네요.
스택오버플로우 원본 링크도 참조하세요. 거기에 질문 올리신 분이 본인 서버와 안드로이드 코드 링크를 걸어 놓으셨네요. https://stackoverflow.com/questions/34483159/socketio-android-not-emitting-connection-event
비교해 보시면 더 도움이 되실 것 같아요.
그래도 안되는 것 같네요 ㅠㅠ
발생하는 에러가 io.socket.engineio.client.EngineIOException: xhr poll error 인데,
Github에 다른 분들이 이슈를 올린 적이 있네요.
https://github.com/socketio/socket.io-client-java/issues/56
티켓은 클로즈되었지만, 실제로 완전하게 동작하는 솔루션은 없는 듯 합니다. 애뮬레이터에서 localhost에 접근하는 경우에는 테스트가 원활하지 않네요. 혹시 디바이스가 있으시면 디바이스를 통해 테스트를 해보시죠?

답변 달기

· 글에 소스 코드 보기 좋게 넣는 법
· 질문에 대해 추가적인 질문이나 의견이 있으면 답변이 아니라 댓글로 달아주시기 바랍니다.
표시할 이름 (옵션):
개인정보: 당신의 이메일은 이 알림을 보내는데만 사용됩니다.
스팸 차단 검사:
스팸 검사를 다시 받지 않으려면 로그인하거나 혹은 가입 하세요.
...