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

标签 node.js sockets

使用电子,我试图在 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/

相关文章:

c++ - deadline_timer 只等待一次

javascript - 将公共(public)变量传递给 Node.js 中的模块

java - 如何从Java获取Linux机器的实际IP

python - 使用 PythonAnywhere 作为游戏服务器

C# 通过 TCP 使用 SSL 发送请求不起作用

c++ - 无法向串口写入数据

javascript - 如何使用 Gulp 和 gulp-data 从单个 jade 模板生成多个 html 文件

node.js - 在 Node 中模拟 postgres 调用

javascript - 关于登录的最佳实践

node.js - Mongoose 在日期范围内聚合