使用UDP传输Node.js文件

Tit*_*man 2 javascript udp file stream node.js

我正在尝试创建一个简单的Node.js服务器,通过UDP从客户端接收文件.我遇到的问题是每次我尝试传输一个大文件(任何超过100kb)时,服务器似乎都没有响应.到目前为止,我已成功传输高达50kb的文件.

有什么方法可以解决这个问题吗?

客户代码:

var PORT = 33333;
var HOST = 'localhost';
var dgram = require('dgram');
var log = require('sys').log;
var client = dgram.createSocket('udp4');
var fs = require("fs");

fs.readFile('C:\\test.pdf', function (err,data) {
  if (err) {
    return console.log(err);
  }
  client.send(data, 0, data.length, PORT, HOST, function(err, bytes) {
    if (err) 
        throw err;
    log('UDP file sent to ' + HOST +':'+ PORT);
    log('File sise: ' + data.length);
  });
});
Run Code Online (Sandbox Code Playgroud)

服务器代码:

var PORT = 33333;
var HOST = 'localhost';
var dgram = require('dgram');
var server = dgram.createSocket('udp4');
var fs = require("fs");
var log = require('sys').log;
var wstream = fs.createWriteStream('test.pdf');

wstream.on('finish', function () {
  console.log('file has been written');
});

server.on('message', function (message, remote) {
    wstream.write(message);
    wstream.end();
});

server.bind(PORT, HOST);
Run Code Online (Sandbox Code Playgroud)

Aar*_*our 7

来自dgram文档:

有效载荷长度字段是16位宽,这意味着正常有效载荷不能大于64K八位字节,包括互联网标题和数据(65,507字节= 65,535 - 8字节UDP标头 - 20字节IP标头); 这对于环回接口通常是正确的,但是对于大多数主机和网络而言,这种长数据报是不切实际的.

您不能发送超过65,507字节的数据报.这是UDP的硬限制.听起来你应该为这些文件使用更高级别的协议.