Javascript 如何使用tcp套接字将图像从[python客户端]发送到[node.js服务器]?

Javascript 如何使用tcp套接字将图像从[python客户端]发送到[node.js服务器]?,javascript,python,node.js,sockets,tcp,Javascript,Python,Node.js,Sockets,Tcp,我想从raspberry pie客户端(python)向服务器(node.js)发送捕获的图像。 我们将图像编码为base64,并使用将base64解码为图像的方法将其发送回服务器,但由于文件的格式不同,图像被破坏 这是我的密码: client.py server.js 请告诉我编码、解码是否错误,TCP套接字通信过程是否错误,或者是否存在其他问题。代码存在多个问题。在客户端: 这可能会发送image\u数据,但可能只发送部分image\u数据,因为send不能保证发送所有数据。使用sendal

我想从raspberry pie客户端(python)向服务器(node.js)发送捕获的图像。 我们将图像编码为base64,并使用将base64解码为图像的方法将其发送回服务器,但由于文件的格式不同,图像被破坏

这是我的密码:

client.py server.js
请告诉我编码、解码是否错误,TCP套接字通信过程是否错误,或者是否存在其他问题。

代码存在多个问题。在客户端:

这可能会发送
image\u数据
,但可能只发送部分
image\u数据
,因为
send
不能保证发送所有数据。使用
sendall
发送所有内容,或者检查
send
的返回值,如果不是一次发送所有内容,请确保稍后发送其余内容

在服务器端:

var imageData;

client.on('data', function(data) {
    imageData+= data;
});

client.on('end', function() {
    console.log('end!')
    var decoded = Buffer.from(imageData, 'base64');
如果您在解码之前查看一下
imageData
,您会发现它以字符串
undefined
开头,然后才是base64数据。但所有这些都被视为base64解码器的输入,导致数据损坏。要修复此问题,请初始化
imageData

var imageData = '';

您是否已经使用十六进制编辑器查看了收到的文件并将其与源文件进行了比较?在比较发送和接收的文件时,文件的前部被截断并消失。我们如何解决这个问题?我将代码更改为
s.sendall(image\u data)
现在该文件具有相同的容量,因此不会消失。但是,编码前后文件的十六进制编辑器值不同。我不认为编码和解码的结果会因编程语言的不同而不同,但为什么它们会不同呢?编码和解码过程有什么问题?当我将代码更正为
var imageData=“”,图像已发送。非常感谢你的帮助@오승찬: 是的,我刚刚意识到您的代码存在多个问题,我第一次注意到只有一个问题。请参阅更新的答案。
s.send(image_data)
var imageData;

client.on('data', function(data) {
    imageData+= data;
});

client.on('end', function() {
    console.log('end!')
    var decoded = Buffer.from(imageData, 'base64');
var imageData = '';