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())
相关推荐
vistaup7 分钟前
kotlin 二维码实现高斯模糊
android·kotlin
愈努力俞幸运1 小时前
function calling与mcp
android·数据库·redis
阿巴斯甜2 小时前
LeakCanary
android
霸道流氓气质2 小时前
SpringAIAlibaba整合 Streamable HTTP 调用免费 MCP Server 实战全解
网络·网络协议·http
阿巴斯甜2 小时前
compose
android
阿巴斯甜2 小时前
Glide
android
-SOLO-2 小时前
使用Perfetto debug trace查看超时slice
android
阿巴斯甜2 小时前
Retrofit
android
阿巴斯甜2 小时前
OkHttp
android
阿巴斯甜3 小时前
Flow
android