首页 > 解决方案 > nodejs net Socket.BytesRead 与 Buffer.ByteLength 不匹配?

问题描述

我正在使用节点的 Net.socket 在 TCP 连接上发送和接收数据。

发送很好,完全没有问题。

但是,我的client.on('data', data => ...回报不同的东西client.BytesReadBuffer.byteLength(data, 'utf-8'))

我正在传输一些使用 Stream 的 C# 代码,它读取的字节数与client.BytesRead

关于给出什么的任何想法?节点是否错误地翻译了 utf-8?

此外,C# 读取的前 4 个字节和 nodejs 获取的前 4 个字节是相同的,之后就出错了。

这是C#

byte[] payloadBytes = new byte[payloadLength];

bytesRead = 0;
while (bytesRead < payloadLength)
{
  bytesRead += stream.Read(payloadBytes, bytesRead, payloadBytes.Length - bytesRead);
}

和相关的节点块

client.on('data', data => {
    console.log("------>", Buffer.byteLength(data, 'utf-8'))
    console.log("client.bytesRead", client.bytesRead)
});

我知道data.length如果它是 UTF-8,那么做 a 不会给出正确的答案,但我有点困惑。

就我而言,忽略最初正确理解和解码的前 4 个字节,我被告知 308 个字节,其中前 4 个是标头并被丢弃,但字节长度为 549?!

标签: c#node.jssocketsutf-8

解决方案


只是为了阻止未来的回复,事实证明我为返回的数据提供的文档是不正确的,而且数据实际上不是 UTF-8 编码的。

所以代码是正确的,但是当它试图从非 UTF-8 流中提取 UTF-8 时,会导致一些奇怪的事情发生。


推荐阅读