当客户端发送无效数据包时,Node.js崩溃

时间:2017-07-18 14:12:26

标签: node.js websocket buffer

我正在使用node.js进行多人游戏,但是当客户端发送无效数据包时它会崩溃。

服务器:

msg.readFloatLE(1, true);

客户端:

msg.setUint8(1, 1);

因此,如果服务器正在等待一个浮点数,但客户端发送一个int,它会因此错误而崩溃:

  

C:\ Program Files \ nodejs \ node.exe:src \ node_buffer.cc:752:断言   `(offset + sizeof(T))< =(ts_obj_length)'失败。

我正在使用ws library,但我很确定它是关于node.js.我该如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您可以使用try catch

处理异常
try {
  msg.readFloatLE(1, true);
}
catch(e) {
  console.log(e,"error)
}

答案 1 :(得分:0)

正如@Ved在他的回答中指出的那样 - 尝试/捕捉将是最好的方法。

只是建议一些不标准的东西:

const defaultCriticalValue = 0.0;
const floatNum = parseFloat('a') || defaultCriticalValue;
msg.readFloatLE(floatNum, true);

答案 2 :(得分:0)

如果您查看readFloatLE的节点文档,它会清楚地说它会为您的示例抛出异常。

// Throws an exception: RangeError: Index out of range
console.log(buf.readFloatLE(1));

您可以查看文档here

问题是你究竟想要完成什么?并且readFloatLE是正确的工具吗?