728x90
오늘은 서버와 socket.io library를 사용해서 통신을 해보려고 합니다!
socket.io library를 사용해서 서버와 연결을 하고 이벤트를 주고받는 예제입니다.
실행 결과입니다!
먼저 아래의 링크를 참고해서 서버 부분을 만들면 됩니다.
2023.04.01 - [Nodejs] - [ Nodejs ] socket.io 사용해서 서버와 데이터 주고받기
간단하게 클라이언트 코드 동작 순서를 먼저 설명해보겠습니다.
1. 서버와 연결할 때 사용할 socket 객체를 생성한다.
여기서 사용하는 socket 객체는 서버와 이벤트를 주고받는 역할을 한다.
2. 서버가 전송한 이벤트를 받았을 때 실행할 동작을 .on() 함수를 사용해서 설정한다.
3. 서버에게 연결을 요청한다.
4. 서버와의 연결에 성공하면 onConnect Listener 의 call 함수가 호출된다.
5. 연결 성공이라는 토스트가 출력된다.
6. 호출된 함수에서 서버에게 server_hi 이름의 이벤트를 전송한다.
7. 서버가 전송한 client_hello 이벤트를 받으면 onClientHello Listener 의 call 함수가 호출된다.
8. 서버에게 받은 데이터("hello") 라는 토스트가 출력된다.
그리고 안드로이드 전체 코드입니다.
build.gradle에 추가할 코드입니다.
implementation ('io.socket:socket.io-client:2.0.0') {
exclude group: 'org.json', module: 'json'
}
먼저 매니페스트에 추가할 코드입니다.
<uses-permission android:name="android.permission.INTERNET" />
<application> 태그에 android:usesCleartextTraffic="true" 속성 추가
레이아웃 코드입니다.
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:layout_marginBottom="8dp"
android:padding="8dp"
android:text="서버와 연결 시작"
android:textSize="24sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
/>
</androidx.constraintlayout.widget.ConstraintLayout>
자바 코드입니다.
public class MainActivity extends AppCompatActivity {
Button 서버와연결요청버튼;
Socket socket;
Emitter.Listener onConnect = new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject msg = new JSONObject();
try {
msg.put("data", "hi");
} catch (JSONException e) {
e.printStackTrace();
}
SendData("연결 성공");
socket.emit("server_hi", msg);
}
};
Emitter.Listener onClientHello = new Emitter.Listener() {
@Override
public void call(Object... args) {
JSONObject msg = (JSONObject) args[0];
String data = null;
try {
data = msg.getString("data");
} catch (JSONException e) {
e.printStackTrace();
}
SendData(data);
}
};
private void SendData(String data){
Message message = new Message();
Bundle bundle = new Bundle();
bundle.putString("message",data);
message.setData(bundle);
handler.sendMessage(message);
}
Handler handler = new Handler(new Handler.Callback() {
@Override
public boolean handleMessage(@NonNull Message message) {
Bundle bundle = message.getData();
String msg = bundle.getString("message","defaultValue");
if(!msg.equals("defaultValue")){
Toast.makeText(MainActivity.this, msg, Toast.LENGTH_SHORT).show();
}
return false;
}
});
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
서버와연결요청버튼 = findViewById(R.id.button);
서버와연결요청버튼.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
socket = IO.socket(URI.create("서버 uri"));//"http://chat.socket.io"); //
socket.on(Socket.EVENT_CONNECT, onConnect);
socket.on("client_hello", onClientHello);
socket.connect();
}
});
}
}
'안드로이드 자바' 카테고리의 다른 글
[Android][Java] 네이버 지도에 현재 위치 표시하기 (0) | 2023.04.22 |
---|---|
[Android][Java]Intent를 이용해 다른 앱으로 이동하기 (0) | 2023.04.19 |
View에 그라데이션 적용하기 (0) | 2023.04.17 |
[Android][JAVA]원형 이미지뷰 만들기 (0) | 2023.04.16 |
[Android][Java] Notification에 ProgressBar 사용하기 (0) | 2023.04.15 |