从HTTP客户端收到的数据在发送到TCP服务器时丢失

我有一个简单的node.js代码的HTTP服务器和一个TCP服务器。 但是当我从http传递一些数据到tcp时,我无法得到正确的文件。 文件总是被打破。

当我testing从本地传递一个图像文件,它对我来说工作正常。 所以,我认为这个问题是upload.js,但我无法解决我的错误。

请帮忙。

[upload.js] – http服务器

var server = http.createServer(function(request, response){ /* my html form is <form method="POST" action="/upload" enctype="multipart/form-data"> */ if(request.url == '/upload') { request.on('data', function(data){ var client = net.createConnection({ port: 1234 }, function(){ client.write(data); client.end() }); }) } }); server.listen(1000); 

[save.js] – tcp服务器

 var net = require('net'); var fs = require('fs'); var server = net.createServer(function(c){ var img = fs.createWriteStream('a.jpg', { defaultEncoding: 'binary' } ); c.on('data', function(data){ img.write(data); }); c.on('end', function(){ }); }); server.listen(1234); 

发生这种情况是因为您没有保存整个预期的文件,而是只保存整个文件。 实际上,您每次创build一个新的连接并在TCP服务器端重新创build同一个文件。

您应该在HTTP服务器端创build一个全局的img var,将其存储在其中,然后仅在传输结束时启动TCP连接。

 var img = []; var server = http.createServer(function(request, response){ /* my html form is <form method="POST" action="/upload" enctype="multipart/form-data"> */ if(request.url == '/upload') { request.on('data', function(data){ img.push(data); }).on('end', function () { var bytes = Buffer.concat(img); var client = net.createConnection({ port: 1234 }, function(){ client.write(bytes, function () { client.end(); }); }); }); } }); server.listen(1000); 

TCP服务器应该没问题,除非你不再需要closuresstream。

 c.on('end', function(){ img.end(); });