面试题答案
一键面试-
处理二进制数据流的基本步骤:
- 创建 Socket 连接:使用
net
模块(对于 TCP 连接)或者dgram
模块(对于 UDP 连接)创建相应的 Socket 实例。 - 监听接收事件:在 Socket 实例上监听
data
事件,当有数据到达时触发。 - 接收二进制数据:
data
事件的回调函数会接收到一个Buffer
对象,这就是接收到的二进制数据。 - 处理二进制数据:可以对
Buffer
对象进行操作,例如裁剪、合并、修改等。 - 发送二进制数据:使用 Socket 的
write
方法将处理后的Buffer
对象数据发送出去。 - 关闭连接:在适当的时候关闭 Socket 连接,例如当数据传输完成或者发生错误时。
- 创建 Socket 连接:使用
-
代码示例(以 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('与服务器的连接已关闭');
});