使用UDP传输Node.js文件

时间:2015-01-08 01:35:48

标签: javascript node.js file stream udp

我正在尝试创建一个简单的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);
  });
});

服务器代码:

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);

1 个答案:

答案 0 :(得分:6)

来自dgram文档:

  

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

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