Hyeyeon blog

[Android] Socket.io를 이용하여 소켓 서버와 안드로이드 앱 통신하기 본문

개발/Android

[Android] Socket.io를 이용하여 소켓 서버와 안드로이드 앱 통신하기

Hyeyeon.P 2020. 12. 11. 18:29
반응형

 
 Android의 Socket.io 라이브러리를 사용하여 앱과 소켓 서버 간의 통신을 구현합니다.

 Socket.io 라이브러리와 관련된 내용은 Android Socket.io Github에서 확인할 수 있습니다.

1. dependency 추가

  build.gradle(module)에  io.socket 의존성을 추가합니다.  

  exclude 구문을 넣지 않으면 특정 버전에서 json 패키지가 제외되었다는 warning 메세지가 발생합니다.

dependency {
    implementation ('io.socket:socket.io-client:1.0.1') {
        exclude group: 'org.json', module: 'json'
    }
}

2. 소켓 연결하기 

  Socket.on()을 사용하여 소켓 통신을 처리합니다.

// 소켓 서버 연결 
val socket = IO.socket(SERVER_URL)
socket.connect()
        
socket.on(io.socket.client.Socket.EVENT_CONNECT) {
    // 소켓 서버에 연결이 성공하면 호출됩니다.
    Log.i("Socket", "Connect")
}.on(io.socket.client.Socket.EVENT_DISCONNECT) { args ->
    // 소켓 서버 연결이 끊어질 경우에 호출됩니다.
    Log.i("Socket", "Disconnet: ${args[0]}")
}.on(EVENT_CONNECT_ERROR) { args ->
    // 소켓 서버 연결 시 오류가 발생할 경우에 호출됩니다. 
    val errorMessage = ""
    if (args[0] is EngineIOException) {
        errorMessage = "code: ${err.code}  message: ${err.message}"
    } 
    Log.i("Socket", "Connect Error: $errorMessage")
}

3. 소켓 서버에 데이터 보내기 

  Socket.emit()을 사용하여 데이터를 전달합니다.

// "message"는 소켓 서버에 전달할 Event 명 입니다. 
val data = "Hello World"
socket?.emit("message", data)

4. 전체 소스코드 

class MainActivity : AppCompatActivity(){
    val SERVER_URL = "http://xxx.xxx.xxx.xxx:3000"
    
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        
        // 소켓 서버 연결 
        val socket = IO.socket(SERVER_URL)
        socket.connect()
        
        socket.on(io.socket.client.Socket.EVENT_CONNECT) {
        	// 소켓 서버에 연결이 성공하면 호출됩니다.
            Log.i("Socket", "Connect")
        }.on(io.socket.client.Socket.EVENT_DISCONNECT) { args ->
        	// 소켓 서버 연결이 끊어질 경우에 호출됩니다.
            Log.i("Socket", "Disconnet: ${args[0]}")
        }.on(EVENT_CONNECT_ERROR) { args ->
        	// 소켓 서버 연결 시 오류가 발생할 경우에 호출됩니다. 
            val errorMessage = ""
            if (args[0] is EngineIOException) {
                errorMessage = "code: ${err.code}  message: ${err.message}"
            } 
            Log.i("Socket", "Connect Error: $errorMessage")
        }
        
        // 데이터 전송 
        // "message"는 소켓 서버에 전달할 Event 명 입니다. 
        val data = "Hello World"
        socket?.emit("message", data) 
    }
}

 

연결되는 글

>> Socket.io를 이용한 소켓 서버 구현하기

 

[Node.js] Socket.io를 이용한 소켓 서버 구현하기

1. socket.io 설치 글 작성 기준, 최신버전은 3.4.0이나 최신버전으로 설치한 후 안드로이드에서 연결 시 ping timeout이 발생하여 연결에 실패하기 때문에 2.3.0 버전으로 설치를 진행합니다. npm install soc

jamie-dev.tistory.com

 

728x90
Comments