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

nodejs socket.io사용해서 안드로이드 소켓 통신 질문드립니다.

0 추천

안녕하세요 이번에 공부하면서 안드로이드, nodejs사용해서 소켓 통신 해보려고 하는데

제대로 작동하질 않아서 이렇게 글 올리게 됐습니다.

안드로이드에서는 socket, nodejs에서는 socket.io사용해서 하려고하는데

인터넷에 올라온 예제 코드를 그대로 작성해도 실행이 되질 않습니다.

어제 글 올렸는데 설명이 부족한 것 같아서 추가해서 질문올립니다ㅠ

var app = require('express')();
var server = require('http').createServer(app);
var io = require('socket.io')(server);

app.get('/', (req, res) => {
  res.send("hello")
})

io.on('connection', function(socket) {
  console.log("user connect");

});

server.listen(3000, function(){
  console.log("server on 3000");
});
package com.example.exam

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import io.socket.client.IO
import io.socket.client.Socket
import java.net.URISyntaxException
class MainActivity : AppCompatActivity() {
    lateinit var socket: Socket

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        try {
            socket = IO.socket("IP주소")
            Log.d("TAG", "try")
        } catch (e: URISyntaxException) {
            e.printStackTrace();
        }
        socket.connect()
    }
}

코드는 이렇게 간단하게 연결 되는지만 확인하도록 일단 바꿧는데,

try내부의 로그는 찍혀서 코드가 실행되긴 했다고 생각하는데

socket.connect()부분이 제대로 실행이 안되는 것 같습니다...

manifast에 인터넷 권한 추가했고, http접속도 허용했습니다.

검색을 해보니 안드로이드에서 로컬호스트 시뮬레이션 포트가 막혀있어서 그렇다는 말을 봤는데

검색해봐도 마땅한 해결법을 찾지 못해서 여기에 글 올립니다.

도움 주시면 감사할 것 같습니다.

안드로이드나 서버에서 특별한 에러는 발생하지 않습니다 ㅠ

아 그리고 메인 쓰레드에서 실행해서 안되는건가 싶어서 코루틴 사용해서

IO로도 돌려봣는데 동일하게 안됐습니다 ㅠㅠ

서버 주소는 cmd에서 ipconfig실행 시 나오는 IPv4주소로 설정했습니다.

bonon (620 포인트) 님이 2021년 2월 4일 질문

1개의 답변

0 추천
일단 connect를 try catch 블록 안으로 옮기시고 로그를 캡쳐해 보세요. 그래야 왜 커넥션이 안되는지 좀 더 근접한 원인을 찾을 수 있을 것 같아요.

그리고 애뮬레이터를 사용하고 계시고 로컬호스트로 접속을 하시는 건가요?

만약 로컬호스트나 127.0.0.1로 연결하시려고 했다면 당연히 안될 겁니다. 애뮬레이터는 시뮬레이터가 아니라서 자동으로 님이 사용하고 있는 컴퓨터의 리소스를 공유하지 못합니다. 루프백 주소가 아닌 다른 IP를 사용하실 수 있다면 그 아이피를 이용하시거나
아니면 애뮬레이터를 API 27이전 버전으로 만드셔서  networkconfig를 추가해 보세요.  cleartext라고 검색해 보시면 해당 정보를 얻으실 수 있을 거예요.

https://developer.android.com/training/articles/security-config
https://medium.com/@son.rommer/fix-cleartext-traffic-error-in-android-9-pie-2f4e9e2235e6
spark (226,720 포인트) 님이 2021년 2월 4일 답변
...