nodejs控制台傳輸、接收文件

  • 2019 年 11 月 30 日
  • 筆記

我一邊查官網文檔一邊寫的,雖然有send方法,但不知道receive方法在哪,最終還是用emit。

ReceiveService.js

//功能:發送請求並接受文件、保存  const io = require('socket.io-client');  socket = io('http://localhost:3000')  const fs = require('fs')    //綁定用戶終端輸入  const readline = require('readline');  const interface = readline.createInterface({      input: process.stdin,      output: process.stdout  });  let count=0;    socket.on('recFile', function (data, filename) {      count++;      console.log('響應'+count, data)      fs.writeFileSync('./Client/' + filename, data)  })  interface.on('line', function (input) {      console.log('input',input)      console.log('您請求了'' + input + "'文件。");        socket.emit('fileReq', input)    })  interface.on('close', function () {      console.log('程式已退出!')  })

FileServer.js

//功能:響應請求並發送文件  const fs = require('fs');      //建立web伺服器  const app = require('http').createServer(handler)  app.listen(3000);  console.log(app)  const io = require('socket.io')(app)  function handler(req, res) {      fs.readdir('./Server', function (err, files) {          if (err) {              console.log(err)              res.end('err')          }          console.log(files)          res.end('<meta charset="utf-8">你可以請求這些內容:' + files.toString())      })      //res.end('File Server')  }  let count=0;  io.on('connection', function (socket) {      socket.on('fileReq', function (filename) {          console.log(filename)          fs.open('./Server/' + filename, 'r', function (err, fd) {              if (err) {                  socket.emit('recFile', 'fail')                  return;              } else {                  fs.stat('./Server/' + filename, function (err, stats) {                      if (err) {                          return;                      }                      console.log(stats.size)                      let buf = new Buffer.alloc(stats.size);                      fs.read(fd, buf, 0, buf.length, 0, function (err, bytes) {                          console.log(fd)                          count++;                          console.log(count)                          socket.emit('recFile', buf, filename);                      })                  })                }          })        })  })