我正在使用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.我该如何解决这个问题?
答案 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是正确的工具吗?