gpt4 book ai didi

java - NodeJS TCP 服务器,onData 小块

转载 作者:可可西里 更新时间:2023-11-01 02:33:25 26 4
gpt4 key购买 nike

我制作了一个简单的 NodeJS TCP 服务器,Java 客户端发送图像:

encodedImage = <a base64 encoded image>
out.write("IMG;" + encodedImage);
out.flush();

我的 NodeJS 服务器如下:

net.createServer(function(TCPSocket){
TCPSocket.on("data", function(data){
console.log("TCP Recieved: " + data.length);
});
}).listen(5000);

但是,即使我发送所有数据并立即刷新,输出如下:

TCP Recieved: 13
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1472
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344
TCP Recieved: 1344

我希望它在一个简单的 block 中接收它,但我假设它是由于 NodeJS 的事件处理机制而发生的,对于作为单个 block 发送的数据实现单个数据 block 的最佳方法是什么?据我所知,一个 TCP 窗口可以比 1344 字节的数据大得多。我想过使用 header 值作为 HTTP,所以我知道广告的长度构造了我想要的对象。

最佳答案

你是对的,在 Node 中,数据将以分 block 的形式出现。您需要保留一个缓冲区,连接所有进入的 block ,然后在套接字关闭时将数据写出到文件系统。这是一个能够接收图像的示例:

net = require('net');
fs = require('fs');

net.createServer(function(socket){
var buffer = new Buffer(0, 'binary');

socket.on("data", function(data){
buffer = Buffer.concat([buffer, new Buffer(data,'binary')]);
});

socket.on("end", function(data) {
fs.writeFile("image.jpg", buffer, function(err) {
if(err) {
console.log(err);
} else {
console.log("Socket[" + socket.name + "] closed, wrote data out to sinfo.data");
}
});

});

}).listen(5000);

console.log('ready');

我使用 netcat 向它发送了一张图片:

$ netcat localhost 5000 < input.jpg

关于java - NodeJS TCP 服务器,onData 小块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13279754/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com