MST
星途 面试题库

面试题:Node.js 中 Socket 编程时如何处理二进制数据流

在 Node.js 的 Socket 编程场景下,假设需要通过 Socket 接收和发送二进制图片数据。请描述处理这类二进制数据流的基本步骤,并且给出一个简单的代码示例,展示如何使用 Node.js 的 Buffer 对象来处理接收的二进制数据,并将处理后的数据通过 Socket 发送出去。
24.8万 热度难度
前端开发Node.js

知识考点

AI 面试

面试题答案

一键面试
  1. 处理二进制数据流的基本步骤

    • 创建 Socket 连接:使用 net 模块(对于 TCP 连接)或者 dgram 模块(对于 UDP 连接)创建相应的 Socket 实例。
    • 监听接收事件:在 Socket 实例上监听 data 事件,当有数据到达时触发。
    • 接收二进制数据data 事件的回调函数会接收到一个 Buffer 对象,这就是接收到的二进制数据。
    • 处理二进制数据:可以对 Buffer 对象进行操作,例如裁剪、合并、修改等。
    • 发送二进制数据:使用 Socket 的 write 方法将处理后的 Buffer 对象数据发送出去。
    • 关闭连接:在适当的时候关闭 Socket 连接,例如当数据传输完成或者发生错误时。
  2. 代码示例(以 TCP 为例)

const net = require('net');

// 创建服务器
const server = net.createServer((socket) => {
    // 监听接收数据事件
    socket.on('data', (buffer) => {
        // 这里简单地对接收的二进制数据(假设是图片数据)进行处理,比如裁剪前100字节
        const newBuffer = buffer.slice(0, 100);
        // 发送处理后的数据
        socket.write(newBuffer);
    });

    // 监听连接结束事件
    socket.on('end', () => {
        console.log('客户端连接关闭');
    });
});

// 监听端口
server.listen(8080, () => {
    console.log('服务器已启动,监听8080端口');
});
// 客户端代码
const net = require('net');

// 创建客户端Socket
const client = net.connect({ port: 8080 }, () => {
    // 读取图片文件作为二进制数据(这里假设图片路径为image.jpg)
    const fs = require('fs');
    const imageBuffer = fs.readFileSync('image.jpg');
    // 发送二进制数据
    client.write(imageBuffer);
});

// 监听接收数据事件
client.on('data', (buffer) => {
    console.log('接收到服务器处理后的数据,长度:', buffer.length);
});

// 监听连接关闭事件
client.on('end', () => {
    console.log('与服务器的连接已关闭');
});