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())
相关推荐
laoli_coding36 分钟前
如何配置HTTPS站点访问的免费SSL域名证书
网络协议·https·node.js·ssl
-SOLO-2 小时前
Android Event 日志完全指南
android
壮哥_icon3 小时前
【Android 系统开发】从掉帧卡顿到丝滑:高频硬件中断(IRQ)的 CPU 亲和性性能优化实战
android·性能优化
千里马学框架3 小时前
Android Framework 新手学习踩坑建议指南
android·智能手机·性能优化·framework·aaos·车载开发·系统工程师
我命由我123455 小时前
执行 Gradle 指令报错,无法将“grep”项识别为 cmdlet、函数、脚本文件或可运行程序的名称
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
狂奔solar6 小时前
ARMA 模型:从白噪声到万能逼近器
android
渣渣灰飞6 小时前
MySQL 系统学习 第五阶段:企业级 MySQL 实战开发 第二章:RBAC 权限系统设计
android·学习·mysql
qq_422828627 小时前
android 图形学之图层数据送显及合成图层(七)
android
MiyamuraMiyako8 小时前
Compose:从自动滚动到双锚点 LazyLayout
android·android jetpack
Keepingrun10 小时前
HTTP基础
网络·网络协议·http