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

问题描述:

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

服务器:

msg.readFloatLE(1, true); 

客户:

C:\Program Files\nodejs\node.exe: src\node_buffer.cc:752: Assertion `(offset + sizeof(T)) <= (ts_obj_length)' failed.

msg.setUint8(1, 1); 

所以,如果服务器正在等待浮动,但客户端发送一个int,它与此错误崩溃我正在使用ws library,但我很确定它是关于node.js.我怎样才能解决这个问题?

+0

你为什么要读一个浮点数,但设置一个int? –

+0

@SterlingArcher我想看看服务器是否崩溃。每个人都可以轻松设置一个int和crash服务器。 – user234

+0

它是自定义包装吗?我在ws中看不到这些方法。 – Lazyexpert

可以使用trycatch

try { 
    msg.readFloatLE(1, true); 
} 
catch(e) { 
    console.log(e,"error) 
} 
+0

但尝试抓住它看起来非常难看。没有其他办法可以摆脱它吗? – user234

+2

你在开玩笑吧。这里有什么丑陋的?这是我们处理异常的方式。 – Ved

+0

**注意**:try/catch只有在@ snovakovic的答案中指出没有第二个参数。 – user234

处理异常正如@Ved在他的回答指出 - 的try/catch将是最好的办法。如果你看看为readFloatLE节点文档上面清清楚楚地写着它抛出异常,为您例如

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

只是建议不是标准的东西。

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

你可以看看文件here

的问题是,究竟你试图完成什么?并readFloatLE正确的工具呢?