c# - nodejs net Socket.BytesRead 与 Buffer.ByteLength 不匹配?
问题描述
我正在使用节点的 Net.socket 在 TCP 连接上发送和接收数据。
发送很好,完全没有问题。
但是,我的client.on('data', data => ...
回报不同的东西client.BytesRead
和Buffer.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?!
解决方案
只是为了阻止未来的回复,事实证明我为返回的数据提供的文档是不正确的,而且数据实际上不是 UTF-8 编码的。
所以代码是正确的,但是当它试图从非 UTF-8 流中提取 UTF-8 时,会导致一些奇怪的事情发生。
推荐阅读
- c# - 根据请求值确定操作方法的名称
- css - 移动响应查询
- hadoop - 无法在 Hadoop 3.2.1 上执行 hadoop jar 命令:连接异常失败:java.net.ConnectException:连接被拒绝;
- python - 使用 send.keys 后出现意外字符 - 三星 s20 设备
- debugging - 为什么 Logger.log 语句不显示在日志中?
- biztalk - BizTalk 2013r2 映射中缺少 Functoid
- javascript - three.js - 相机后面点的二维屏幕坐标是什么
- java - 在java中使用三元运算符添加值时出现错误值
- reactjs - 如选择数字时,增加项目数?
- python - 如何给所有具有某种不和谐状态的用户一个角色