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_

활동하기