NodeJS使用socket传输大文件

本文介绍了如何利用NodeJS的net模块和Buffer对象处理大文件的socket传输。在传输过程中,文件数据被转化为十六进制并分块发送,接收端同样分块接收并写入。由于数据块大小不固定,需要通过'"data'事件回调自行处理数据拼接。文中给出了客户端和服务端的关键代码示例。
摘要由CSDN通过智能技术生成

NodeJS的net模块为我们提供了socket相关API,介于此我们可以进行相关的网络编程。JavaScript 语言自身只有字符串数据类型,没有二进制数据类型,需要通过Buffer对象来处理。在这里我们读取文件时,将数据直接存储到Buffer对象里,在传输时为了统一收发时的格式,全部以十六进制进行(也可用其他)。在传输大文件时,由于内存等的限制,我们不能一次性发送数据,需要将数据不断地分块读取发送,在接收时也要分块接收写入,这就要求收发时分块起始位置要一致,文件的相关信息也需要提前指定。
NodeJS的socket接收接收到的消息都是以socket.on(‘data’,callback)回调的形式得到,可是由于网络状况,缓存状况等多种原因,每次收到的data大小不确定,在相关API中也没有找到设置每次触发回调时data大小的参数,所以就需要我们自己来判断,将data重新拼接指定大小。
上关键代码:
客户端:

function sendFile(path, name) {
    let fileInfo = fs.statSync(path);
    let fileSize = fileInfo.size;
    client.write(JSON.stringify({'id': "client2", 'fileInfo': {'fileSize': fileSize, fileName: name}}));
    let sendSize = 0;
    let packSize = 1024;
    let fd =
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值