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.pswp.cn/pingmian/77899.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/77899.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/77899.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

4.LinkedList的模擬實現:

LinkedList的底層是一個不帶頭的雙向鏈表。 不帶頭雙向鏈表中的每一個節點有三個域:值域,上一個節點的域,下一個節點的域。 不帶頭雙向鏈表的實現: public class Mylinkdelist{//定義一個內部類(節點)stat…

Sentinel數據S2_SR_HARMONIZED連續云掩膜+中位數合成

在GEE中實現時,發現簡單的QA60是無法去云的,最近S2地表反射率數據集又進行了更新,原有的屬性集也進行了變化,現在的SR數據集名稱是“S2_SR_HARMONIZED”。那么: 要想得到研究區無云的圖像,可以參考執行以下…

理解計算機系統_網絡編程(1)

前言 以<深入理解計算機系統>(以下稱“本書”)內容為基礎&#xff0c;對程序的整個過程進行梳理。本書內容對整個計算機系統做了系統性導引,每部分內容都是單獨的一門課.學習深度根據自己需要來定 引入 網絡是計算機科學中非常重要的部分,筆者過去看過相關的內…

【2025】Datawhale AI春訓營-RNA結構預測(AI+創新藥)-Task2筆記

【2025】Datawhale AI春訓營-RNA結構預測&#xff08;AI創新藥&#xff09;-Task2筆記 本文對Task2提供的進階代碼進行理解。 任務描述 Task2的任務仍然是基于給定的RNA三維骨架結構&#xff0c;生成一個或多個RNA序列&#xff0c;使得這些序列能夠折疊并盡可能接近給定的目…

vim 命令復習

命令模式下的命令及快捷鍵 # dd刪除光所在行的內容 # ndd從光標所在行開始向下刪除n行 # yy復制光標所在行的內容 # nyy復制光標所在行向下n行的內容 # p將復制的內容粘貼到光標所在行以下&#xff08;小寫&#xff09; # P將復制的內容粘貼到光標所在行以上&#xff08;大寫&…

哪些心電圖表現無緣事業編體檢呢?

根據《公務員錄用體檢通用標準》心血管系統條款及事業單位體檢實施細則&#xff0c;心電圖不合格主要涉及以下類型及處置方案&#xff1a; 一、心律失常類 早搏&#xff1a;包括房性早搏、室性早搏和交界性早搏。如果每分鐘早搏次數較多&#xff08;如超過5次&#xff09;&…

Linux學習——UDP

編程的整體框架 bind&#xff1a;綁定服務器&#xff1a;TCP地址和端口號 receivefrom()&#xff1a;阻塞等待客戶端數據 sendto():指定服務器的IP地址和端口號&#xff0c;要發送的數據 無連接盡力傳輸&#xff0c;UDP:是不可靠傳輸 實時的音視頻傳輸&#x…

ReAct Agent 實戰:基于DeepSeek從0到1實現大模型Agent的探索模式

寫在前面:動態思考,邊想邊做 大型語言模型(LLM)的崛起開啟了通用人工智能(AGI)的無限遐想。但要讓 LLM 從一個被動的“文本生成器”轉變為能夠主動解決問題、與環境交互的智能體(Agent),我們需要賦予它思考、行動和學習的能力。ReAct (Reason + Act) 框架正是實現這一…

從物理到預測:數據驅動的深度學習的結構化探索及AI推理

在當今科學探索的時代&#xff0c;理解的前沿不再僅僅存在于我們書寫的方程式中&#xff0c;也存在于我們收集的數據和構建的模型中。在物理學和機器學習的交匯處&#xff0c;一個快速發展的領域正在興起&#xff0c;它不僅觀察宇宙&#xff0c;更是在學習宇宙。 AI推理 我們…

結合地理數據處理

CSV 文件不僅可以存儲表格數據&#xff0c;還可以與地理空間數據結合&#xff0c;實現更強大的地理處理功能。例如&#xff0c;你可以將 CSV 文件中的坐標數據轉換為點要素類&#xff0c;然后進行空間分析。 示例&#xff1a;將 CSV 文件中的坐標數據轉換為點要素類 假設我們有…

SpringBoot中6種自定義starter開發方法

在SpringBoot生態中,starter是一種特殊的依賴,它能夠自動裝配相關組件,簡化項目配置。 自定義starter的核心價值在于: ? 封裝復雜的配置邏輯,實現開箱即用 ? 統一技術組件的使用規范,避免"輪子"泛濫 ? 提高開發效率,減少重復代碼 方法一:基礎配置類方式 …

滾珠導軌松動會導致哪些影響?

直線導軌用于高精度或快速直線往復運動場所&#xff0c;且能夠擔負一定的扭矩&#xff0c;在高負載的情況下實現高精度的直線運動。它主要由導軌和滑塊組成&#xff0c;其中導軌作為固定元件&#xff0c;滑塊則在其上進行往復直線運動。但是滾珠導軌松動會導致哪些影響&#xf…

從零開始搭建Django博客②--Django的服務器內容搭建

本文主要在Ubuntu環境上搭建&#xff0c;為便于研究理解&#xff0c;采用SSH連接在虛擬機里的ubuntu-24.04.2-desktop系統搭建&#xff0c;當涉及一些文件操作部分便于通過桌面化進行理解&#xff0c;通過Nginx代理綁定域名&#xff0c;對外發布。 此為從零開始搭建Django博客…

ZLMediaKit支持JT1078實時音視頻

ZLMediaKit 對 JT1078 實時音視頻協議的支持主要通過其擴展版本或與其他中間件結合實現。以下是基于搜索結果的綜合分析&#xff1a; 一、ZLMediaKit 原生支持能力 開源版本的基礎支持 ZLMediaKit 開源版本本身未直接集成 JT1078 協議解析模塊&#xff0c;但可通過 RTP 推流功能…

Java隊列(Queue)核心操作與最佳實踐:深入解析與面試指南

文章目錄 概述一、Java隊列核心實現類對比1. LinkedList2. ArrayDeque3. PriorityQueue 二、核心操作API與時間復雜度三、經典使用場景與最佳實踐場景1&#xff1a;BFS層序遍歷&#xff08;樹/圖&#xff09;場景2&#xff1a;滑動窗口最大值&#xff08;單調隊列&#xff09; …

MetaGPT智能體框架深度解析:記憶模塊設計與應用實踐

在AI智能體技術從單點突破邁向系統工程的關鍵階段&#xff0c;MetaGPT憑借其創新的記憶架構重新定義了多智能體協作范式。本文深度解構其革命性的三級記憶系統&#xff0c;揭秘支撐10倍效能提升的知識蒸餾算法與動態上下文控制策略&#xff0c;通過企業級應用案例與性能基準測試…

集結號海螺捕魚服務器調度與房間分配機制詳解:六

本篇圍繞服務器調度核心邏輯進行剖析&#xff0c;重點講解用戶連接過程、房間分配機制、服務端并發策略及常見性能瓶頸優化。適用于具備中高級 C 后端開發經驗的讀者&#xff0c;覆蓋網絡會話池、邏輯服調度器與房間生命周期管理等關鍵模塊。 一、服務器結構概覽 整體系統采用…

【電子通識】熱敏打印機是怎么形成(打印)圖像和文字的?

在我們身邊&#xff0c;熱敏打印方式常見用于裝飾貼紙、便利店的小票。此外&#xff0c;物流及食品條碼標簽、身份證件、機票?火車票、X光片、食品日期印刷等&#xff0c;很多打印都用到了熱敏打印頭。 熱敏打印頭的蓄熱層(涂釉層)上分布著一排加熱元件&#xff08;發熱線&…

SQL注入漏洞中會使用到的函數

目錄 一、信息獲取函數 1. 通用函數 2. 元數據查詢&#xff08;INFORMATION_SCHEMA&#xff09; 二、字符串操作函數 1. 字符串連接 2. 字符串截取 3. 編碼/解碼 三、報錯注入專用函數 1. MySQL 2. SQL Server 3. PostgreSQL 四、時間盲注函數 1. 通用延遲 2. 計…

車載信息安全架構 --- 汽車網絡安全

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 周末洗了一個澡,換了一身衣服,出了門卻不知道去哪兒,不知道去找誰,漫無目的走著,大概這就是成年人最深的孤獨吧! 舊人不知我近況,新人不知我過…