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 =