【发布时间】:2015-03-06 01:36:07
【问题描述】:
我正在尝试创建一个简单的 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);
【问题讨论】:
-
通过 UDP 传输这样的文件是一个坏主意,恕我直言。您可能会错过使用 UDP 的数据包,这意味着您最终可能会得到一个不完整的文件。为什么不使用 TCP?
-
如果你能提供帮助,绝对不要为此使用 UDP。除了丢弃的数据包外,数据包乱序到达的情况非常。 TCP 为您解决所有这些问题。
-
我知道 TCP 更好,使用 UDP 以外的其他方式是可行的方法。我只是好奇是什么导致了这个问题以及如何解决它。
标签: javascript node.js file stream udp