我正在尝试创建一个简单的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);
答案 0 :(得分:6)
来自dgram
文档:
有效载荷长度字段是16位宽,这意味着正常有效载荷不能大于64K八位字节,包括互联网标题和数据(65,507字节= 65,535 - 8字节UDP标头 - 20字节IP标头);对于环回接口通常都是如此,但对于大多数主机和网络而言,这种长数据报是不切实际的。
您无法发送超过65,507字节的数据报。这是UDP的硬限制。听起来你应该为这些文件使用更高级别的协议。