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

[코틀린] soket.io 통신 관련 질문입니다.

0 추천

현재 Node.js를 통해서 server를 구현했고, kotlin을 통해서 안드로이드 client를 구현했습니다.

구글링을 통해서 연결까지만! 해보자 하여

try {
    mSocket = IO.socket("[uri]")

} catch(e: URISyntaxException) {
    Log.e("socket", "$e")
}

mSocket.connect()

 

이렇게 만들고 서버측에서 확인해보니 아무런 로그도 찍히지가 않습니다.

gradle이나 manifest에 해줘야하는 기본적인 설정들도 모두 완료했습니다.

mSocket을 로그찍어보니, socket@~~~ 이런식으로 뜨는데,

mSocket.conneted를 통해 연결되었는지 true/false를 찍어보면 false로 찍힙니다.

현재 웹, ios, 안드로이드 에서 개발중인데, 다른 툴에서는 서버에 연결이 되었다고 로그가 찍히는 상황이라 백엔드 쪽 실수는 아닌듯 합니다ㅠ

어떻게 연결해야할까요? 연결까지는 구글링했을때 쉬운 작업이라 생각했는데, 제일 처음 연결하는 부분부터 막히니 막막하네요..

hand (1,150 포인트) 님이 2022년 3월 15일 질문
혹시 AndroidMenifest.xml에 Internet 퍼미션은 추가하셨나요?
안녕하세요 spark님 Menifest에 internet 퍼미션 추가했습니다. retrofit을 이용한 통신은 원활하게 작동하는데 채팅 구현을 위해서 socket 통신 구현중에 있는데 connect 단계에서 막히네요..
로그가 찍혔다는 게 catch 블록에서 찍혔다는 건가요, 아님 다른 곳인가요? 위의 코드에는 catch 블록에만 로그를 출력하는 코드가 있는데요.
아 mSocket.connect()를 해주면, 서버에서 socket.id 가 찍히도록 구현했습니다. 그리고 밑의 socket@~~~는 mSocket = IO.socket("uri")가 작동을 하고 있는지 궁금해서, Log.d("socket", "$mSocket"}을 통해 로그를 찍어본 기록이고, 구현과는 상관없는 부분이라 소켓연결을 위한 코드만 따로 올린 것입니다.
try {
            val opts = IO.Options()
            mSocket = IO.socket("uri")

        } catch(e: URISyntaxException) {
            Log.e("socket", "$e")
        }

        mSocket.connect()
        Log.e("mSocket", "$mSocket")
        Log.e("mSocket", "${mSocket.connected()}")

현재 작성된 코드는 이렇고,

E/mSocket: io.socket.client.Socket@c3c4c
    false

이렇게 로그가 찍히고 있는 상황입니다.
혹시 애뮬레이터에서 테스트 하셨나요? 그렇다면, 애뮬레이터에서는 127.0.0.1이나  localhost같은 루프백 주소는 동작하지 않습니다. 이유는 애뮬레이터도 실제 디바이스와 같이 동작을 하도록 되어 있기 때문에, 동작하는 컴퓨터의 공용 IP나 애뮬레이터에서 사용하는 루프백 주소를 사용해야 합니다.
안녕하세요 좋은 아침입니다. 에뮬레이터에서 테스트를 진행하였으나, 루프백 주소가 아닌, 서버에서 포트번호 3001로 열어서 저한테 보내준 주소를 통해서 진행하였습니다..
Android OS 버전에 따라 ClearText 를 지원하지 않기 때문에, NetworkSeccutiryConfig를 설정하셔야 하는지 체크해 보세요.
https://appsec-labs.com/portal/understanding-the-android-cleartexttrafficpermitted-flag/
https://developer.android.com/training/articles/security-config

제 경험으로는 networkSecurityConfig를 제대로 설정해도 되지 않는 경우가 생기더라구요.
실제 디바이스로 테스트 하는게 골치가 덜 아프긴 합니다.
자료 찾아주셔서 정말 감사합니다!!
디바이스로도 테스트 진행해봐야겠네요

많은 도움 주셔서 다시 한번 감사드립니다!
spark님 도움주셔서 정말 감사드립니다. 에뮬레이터에서 테스트 진행해서 안됐던거였습니다. 디바이스를 통해 테스트해보니 서버측에서 socket.id 잘 찍히네요!
해결하셨다니 잘 됐네요.

답변 달기

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