Android studio开发——room功能实现用户之间消息的发送

文章目录

        • 1. Flask-SocketIO 后端代码
          • 后端代码
        • 2. Android Studio Java 客户端代码
          • 客户端代码
        • 3. 代码说明


SocketIO基础

1. Flask-SocketIO 后端代码
后端代码
from flask import Flask, request
from flask_socketio import SocketIO, emit
import uuid



app = Flask(__name__)
socketio = SocketIO(app)

# 存储客户端的 session ID 和用户名的映射
clients = {}

@socketio.on('join')
def on_join():
    username = request.args.get('username')
    room = username 
    clients[username] = username
    join_room(room)

@socketio.on('leave')
def on_leave():
    username = request.args.get('username')
    room = username 
    leave_room(room)
    removed_value = clients.pop(username)


@socketio.on('client_message')
def handle_client_message(data):
    target_username = data.get('target')
    message = data.get('message')
    if target_username in clients:
    	emit('server_message', message , to=target_username )
    else:
        # 如果没有指定目标用户,则广播消息
        emit('server_message', "targetUsernameOffline")#返回发送失败消息:目标用户离线

if __name__ == '__main__':
    socketio.run(app, host='0.0.0.0', port=5000)
2. Android Studio Java 客户端代码
客户端代码
import io.socket.client.IO;
import io.socket.client.Socket;
import io.socket.emitter.Emitter;

public class MainActivity extends AppCompatActivity {
    private Socket mSocket;

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

        try {
            // 替换为你的服务器地址
            mSocket = IO.socket("http://your-server-address:5000");
            mSocket.connect();


			mSocket.emit("join", new JSONObject()
            		.put("username", "1331554545") // 每个用户拥有自己的房间


            // 发送消息给特定用户
            mSocket.emit("client_message", new JSONObject()
                    .put("target", "1331554646") // 目标用户的用户名
                    .put("message", "Hello Bob!")); // 消息内容

			            // 监听服务器消息
            mSocket.on("server_message", new Emitter.Listener() {
                @Override
                public void call(Object... args) {
                    String message = (String) args[0];
                    runOnUiThread(() -> {
                        Toast.makeText(MainActivity.this, "Received: " + message, Toast.LENGTH_SHORT).show();
                    });
                }
            });
            
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mSocket.emit("leave", new JSONObject()
            		.put("username", "1331554545") // 关闭对话删除房间
        mSocket.disconnect();
        mSocket.off("server_message");
    }
}
3. 代码说明
  1. 后端代码

    • on_join 中,每个连接以自己username创建房间,表示上线。
    • handle_client_message 中,根据通过target_username向指定房间发送消息,完成向指定客户端发送消息
    • on_leave 中,从MainActivity离开,删除房间,表示离线。
  2. 客户端代码

    • 客户端通过 socket.on 监听服务器发送的 server_message 事件。
    • 客户端通过 socket.emit 向服务器发送消息,进而向指定客户端发送消息。

你可能感兴趣的:(Android开发,python,flask,android,android,studio,java,websocket)