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())
相关推荐
一颗青果2 小时前
如何加速TCP传输大文件
网络·网络协议·tcp/ip
su_ym81102 小时前
Android属性系统
android·framework·property
明天就是Friday2 小时前
Android实战项目③ Room+Clean Architecture开发待办事项App 完整源码详解
android
没有了遇见2 小时前
《彻底搞懂 ViewModel:作用、原理与源码分析》
android
Fate_I_C3 小时前
Kotlin 协程:串行/并行请求、async/await、coroutineScope 管理并发、重试机制
android·代码规范
山河梧念3 小时前
【保姆级教程】VMware虚拟机安装全流程
android·java·数据库
常利兵3 小时前
Kotlin类型魔法:Any、Unit、Nothing 深度探秘
android·开发语言·kotlin
y小花3 小时前
安卓vold服务
android·linux·运维
明天就是Friday3 小时前
Android实战项目⑤ Paging 3开发社交媒体信息流App 完整源码详解
android·媒体