안드로이드 Socket.io 소켓통신 하기

서버쪽이 이미 구성되어 있다는 가정으로 정리한 코드이다.

일단 안드로이드 스튜디오에서 socket.io 를 추가한다. 모듈로 추가하는 방법은 http://bongsunga.com/blog/3640 여기에 써 놓았다.

 

그럼 본격적으로 코드를 작성한다.

AndroidManifest.xml 안에 <manifest> 안에 아래 코드를 넣어준다.

<uses-permission android:name="android.permission.INTERNET" />

아래 코드들을 MainActivity.java 에 작성하는 코드이다.
상단에 임포트 코드를 넣어준다.
import com.github.nkzawa.emitter.Emitter;
import com.github.nkzawa.socketio.client.IO;
import com.github.nkzawa.socketio.client.Socket;

그런 후에 public class MainActivity extends AppCompatActivity {
이런식으로 감쌓은 부분에 아래 코드를 넣어준다.
private Socket mSocket;
{
    try {
        mSocket = IO.socket("http://서버ip:포트번호");
    } catch (URISyntaxException e) {

    }
}

그리고 onCreate(~~) { 안에  아래처럼 작성한다.
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mSocket.on("받을 이벤트명", onNewMessage);
    mSocket.connect();
}

//받을 이벤트명은 서버쪽이랑 같은 이름 만들어서 넣으면 됨

이제 onCreate(~~) { 가 끝나는 } 이 부분 다음 줄 부터 메시지 주고 받아 처리하는 코드를 넣어준다.
private Emitter.Listener onNewMessage = new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        getActivity().runOnUiThread(new Runnable() {
            @Override
            public void run() {
                JSONObject data = (JSONObject) args[0];
                String username;
                String message;
                try {
                    username = data.getString("username");
                    message = data.getString("message");
                } catch (JSONException e) {
                    return;
                }
                // 메시지를 받으면 data에 담고,
                // username와 message라는 키값으로 들어왔다는 가정으로 작성된 코드다.
                // addMessage(username, message); 이런 식으로 코드를 실행시키면 addMessage 쪽으로 인자를 담아 보내니 화면에 노출하게 만들면 될 것이다.
                
            }
        });
    }
};

이번에는 서버쪽으로 메시지 전달할 때는 전송 버튼같은 이벤트가 있는 곳에 아래 코드를 넣어주면 된다.
JSONObject data = new JSONObject();
try {
  data.put("username", "홍길동");
  data.put("message", "헬로 월드");
  mSocket.emit('받을 이벤트명', data);
} catch(JSONException e) {
  e.printStackTrace();
}
//받을 이벤트명은 위에서도 나온 서버쪽과 맞춰놓은 이벤트명이다.

 

안드로이드 ‘Native Socket.IO and Android’ 코드는 https://socket.io/blog/native-socket-io-and-android/

Socket.io 안드로이드 라이브러리 사용법은 https://dev-juyoung.github.io/2017/09/05/android-socket-io/

참고하면 된다.

TOP