Android 使用WebSocket通信

文章目录

Android 使用WebSocket通信

服务端使用Node

javascript 复制代码
const sd = require("silly-datetime");
const http = require("http");
const WebSocketServer = require("websocket").server;

const httpServer = http.createServer((request, response) => {
    console.log("[" + new Date + "] Received request for " + request.url);
    response.writeHead(404);
    response.end();
});

const wsServer = new WebSocketServer({
    httpServer,
    autoAcceptConnections: true
});

wsServer.on("connect", (connection) => {
    connection.on("message", (message) => {
        if (message.type === "utf8") {
            console.log("服务器接收1:", message);
            const data = {
                "content": "服务器自动回复",
                "client": message.utf8Data,
                "date": sd.format(new Date(), "YYYY-MM-DD HH:mm:ss")
            };
            // 服务端发送文本数据
            connection.sendUTF(JSON.stringify(data));
        } else if (message.type === "binary") {
            const receivedMsg = message.binaryData.toString("utf8");
            console.log("服务器接收2:", receivedMsg);
            const data = {
                "content": "服务器自动回复",
                "client": receivedMsg,
                "date": sd.format(new Date(), "YYYY-MM-DD HH:mm:ss")
            };
            // 服务端发送二进制字符串
            const buffer = Buffer.from(JSON.stringify(data), "utf8");
            connection.sendBytes(buffer);
        }
    });
    // 连接的关闭监听
    connection.on("close", (reasonCode, description) => {
        console.log("[" + new Date() + "] Peer " + connection.remoteAddress + " disconnected.");
    });
    // 接收控制台的输入
    process.stdin.on("data", function (buffer) {
        const message = buffer.toString().trim();
        console.log("控制台接收:", message);
        const data = {"content": message, "date": sd.format(new Date(), "YYYY-MM-DD HH:mm:ss")};
        connection.sendUTF(JSON.stringify(data));
    });
});

httpServer.listen(3000, () => {
    console.log("服务器启动成功,地址: ws://127.0.0.1:3000");
});

Android端使用OkHttp

创建请求:

kotlin 复制代码
val client = OkHttpClient()
val request = Request.Builder()
    .url("ws://192.168.8.109:3000")
    .build()

建立连接:

kotlin 复制代码
val listener = object : WebSocketListener() {
    override fun onOpen(webSocket: WebSocket, response: Response) {
        super.onOpen(webSocket, response)
        Log.e("TAG", "连接成功")
    }

    override fun onFailure(webSocket: WebSocket, t: Throwable, response: Response?) {
        super.onFailure(webSocket, t, response)
        Log.e("TAG", "连接失败:" + t.message)
    }

    override fun onClosed(webSocket: WebSocket, code: Int, reason: String) {
        super.onClosed(webSocket, code, reason)
        Log.e("TAG", "连接正常关闭")
    }

    override fun onMessage(webSocket: WebSocket, text: String) {
        super.onMessage(webSocket, text)
        Log.e("TAG", "接收文本1: $text")
    }

    override fun onMessage(webSocket: WebSocket, bytes: ByteString) {
        super.onMessage(webSocket, bytes)
        Log.e("TAG", "接收文本2: $bytes")
    }
}

// 建立连接
val webSocket = client.newWebSocket(request, listener)

发送数据;

kotlin 复制代码
// 发送文本消息
webSocket.send(msg)

// 发送二进制消息
webSocket.send(msg.encodeUtf8())
相关推荐
邪修king22 分钟前
Re:Linux 系统篇(二十九):动静态库Chapter2:动态库深度辨析 —— 核心本质、制作流程、双阶段查找模型与排错指南
android·java·linux·开发语言
Mr YiRan8 小时前
网络请求API监控与网络切换埋点
android·网络
Shota Kishi8 小时前
Solana Shreds 的 UDP 直投架构:Shredstream UDP Forwarding 的设计与实现
网络协议·架构·udp·区块链·solana
李昊哲小课10 小时前
Spring Boot SSE 实时推送教程
spring boot·websocket·flux·sseemitter
美狐美颜sdk11 小时前
直播APP开发技术栈详解:视频美颜SDK、人脸识别与实时渲染
android·人工智能·音视频·美颜sdk·直播美颜sdk
szephyr15 小时前
WebSocket 实战:心跳、断线重连、鉴权,一次讲清
前端·websocket·node.js·长连接·实时通信
玄芯散人16 小时前
【筑基·055】TCP vs UDP:可靠和快速的取舍
网络协议·tcpdump
奈斯先生Vector17 小时前
当模型版本不断变化,RelayRouter 能否帮助 AI 应用摆脱深度绑定
android·java·人工智能·开源·aigc
TimeFine17 小时前
让强模型做“总工”,让高性价比模型写代码
android
又见情义18 小时前
RK3568 Android 13 屏蔽 healthd 电池日志经验分享
android