gpt4 book ai didi

node.js - 写入 NodeJS 套接字时出错(TypeError : Invalid data, block 必须是字符串或缓冲区,而不是对象)

转载 作者:太空宇宙 更新时间:2023-11-03 21:53:07 25 4
gpt4 key购买 nike

使用电子,我尝试在 TCP 套接字上写出一些字节。我在调用 write 之前使用 Buffer.from 转换为缓冲区,但仍然收到上述错误。我已将其简化为仅创建一个空的 ArrayBuffer 并调用 Buffer.from

var abuff = new ArrayBuffer(8 + encodedBuffer.length);
console.log(Buffer.from(abuff));
socket.write(Buffer.from(abuff));

类型错误:无效数据, block 必须是字符串或缓冲区,而不是对象console.log 显示以下内容:

Uint8Array(51) [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

而不是缓冲区?

电子版本:战神:“1.10.1-DEV”原子壳层:“1.7.9” Chrome :“58.0.3029.110”电子:“1.7.9”http_parser:“2.7.0”模块:“54” Node :“7.9.0”openssl:“1.0.2k”紫外线:“1.11.0”v8:“5.8.283.38”zlib:"1.2.11"

对于任何看到此类问题的人 - 这段代码位于 Electron 的“渲染器”进程中,问题是“渲染器”中的 Buffer 对象没有从 Buffer.from 创建 Buffer 对象。

为了解决这个问题,我使用 IPC 将请求从渲染器发送到主进程,并让主进程管理套接字通信。

最佳答案

正如错误中所说, block 只能是类型 stringbuffer .
因此,我们对您的问题几乎没有解决方案。
第一个,只需将对象转换为字符串 JSON.stringify(<your data to send>) ,然后您就可以在另一端对其进行解码。
或者您可以使用 object mode , 更多 here

我尝试测试你的代码并且它有效。

var net = require('net');
var encodedBuffer = 9;
var abuff = new ArrayBuffer(8 + encodedBuffer.length);

var server = net.createServer(function(socket) {
socket.write('Echo server\r\n');
console.log(Buffer.from(abuff));
socket.write(Buffer.from(abuff));
socket.pipe(socket);
});

server.listen(1337, '127.0.0.1');

当我启动应用程序并从另一个命令行 session 向服务器发出请求时 nc 127.0.0.1 1337 ,我在服务器窗口中看到输出。

关于node.js - 写入 NodeJS 套接字时出错(TypeError : Invalid data, block 必须是字符串或缓冲区,而不是对象),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48066897/

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