当前位置: 首页 > java >正文

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 uuidapp = Flask(__name__)
socketio = SocketIO(app)# 存储客户端的 session ID 和用户名的映射
clients = {}@socketio.on('join')
def on_join():username = request.args.get('username')room = username clients[username] = usernamejoin_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;@Overrideprotected 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() {@Overridepublic 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();}}@Overrideprotected 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 向服务器发送消息,进而向指定客户端发送消息。
http://www.xdnf.cn/news/439.html

相关文章:

  • sqilite_web安装使用
  • 实现Azure Function安全地请求企业内部API返回数据
  • Rust网络编程实战:全面掌握reqwest库的高级用法
  • Meteonorm8-免费使用教程(详细教程-免费)
  • 数据结构(6)——队列
  • STM32N6如何调试下载代码
  • MCP认证难题破解:常见技术难题实战分析与解决方案
  • 哈夫曼编码和哈夫曼树
  • Dify快速入门之构建工作流
  • Python语法系列博客 · 第4期[特殊字符] 函数的定义与使用:构建可复用的模块
  • java ai 图像处理
  • php实现zip压缩
  • Linux:基础IO---动静态库
  • python 库 下载 ,整合在一个小程序 UIUIUI
  • Grouped Query Attention (GQA) PyTorch实现
  • 单片机如何通过串口与上位机进行数据交换
  • RAG vs. CAG vs. Fine-Tuning:如何为你的大语言模型选择最合适的“脑力升级”?
  • 使用EXCEL绘制平滑曲线
  • 从代码学习深度学习 - 优化算法 PyTorch 版
  • Vue 3 中将 ref 创建的响应式对象数据转换为普通(非响应式)的数据
  • JAVA IO、BIO、NIO、AIO及零拷贝
  • Warcraft Logs [Classic] [WCL] Usage Wizard <HTOC>
  • FPGA系列之DDS信号发生器设计(DE2-115开发板)
  • 睡前小故事数据集分享
  • 腾讯wxg企业微信 后端开发一面
  • [Swift]Xcode模拟器无法请求http接口问题
  • 阿里云Clickhouse 冷热数据分层存储 实战记录
  • 【图片识别改名工具】图片文件区域OCR识别并自动重命名,批量识别指定区域根据指定识别文字批量改名,基于WPF和阿里云的技术方式实现
  • 二进制裁剪命令mips-linux-gnu-strip 命令的使用
  • NoSQl注入学习