Lined Notebook

[Android] Node.js Socket.io 통신 - 2

by JungWook_

삽질은 오래했는데 사실 엄청 간단하게 구현이 됐습니다.

 

https://socket.io/blog/native-socket-io-and-android/

 

Socket.IO — Native Socket.IO and Android

In this tutorial well learn how to create a chat client that communicates with a Socket.IO Node.JS chat server, with our native Android Client! If you want to jump straight to the code, its on GitHub

socket.io

먼저 build.gradle에 다음 코드를 추가합니다.

// app/build.gradle
dependencies {
    ...
    implementation 'com.github.nkzawa:socket.io-client:0.6.0'
}

 

그리고 AndroidManifest.xml에 인터넷 퍼미션을 추가합니다.

<!-- app/AndroidManifest.xml -->
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <uses-permission android:name="android.permission.INTERNET" />
    ...
</manifest>

 

그 다음 중요한게 정확히 몇버전인지는 모르겠지만 

compileSdkVersion 27
minSdkVersion 16
targetSdkVersion 27

 

안드로이드 버전을 저렇게 맞춰줍니다. 계속 안되다가 버전을 수정하니까 됩니다... 이거때문에 시간을 얼마나 날렸는지...

 

MainActivity.java

package com.example.socketio;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;

import com.github.nkzawa.socketio.client.IO;
import com.github.nkzawa.socketio.client.Socket;
import com.github.nkzawa.emitter.Emitter;

import java.net.URISyntaxException;

public class MainActivity extends AppCompatActivity {
    private Socket socket;
    {
        try {
            socket = IO.socket("서버 url");
        } catch (URISyntaxException e) {
            e.printStackTrace();
        }
    }

    Button btn;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        socket.on("msg", onMessage);
        socket.connect();

        btn = (Button)findViewById(R.id.sendBtn);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                socket.emit("msg", "hi");
                Log.e("send", "data");
            }
        });
    }

    private Emitter.Listener onMessage = new Emitter.Listener() {
        @Override
        public void call(Object... args) {
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    String data = (String) args[0];
                    Log.e("get", data);
                }
            });
        }
    };
}

최대한 필요한 부분만 넣어봤습니다. 버튼을 누르면 서버로 hi라는 메시지를 보냅니다. 서버에서 메시지가 오면 로그로 출력합니다. 레이아웃은 너무 간단해서 스킵합니다.

블로그의 정보

hongmono

JungWook_

활동하기