2017-07-18 12 views
0

node.jsでマルチプレイヤーゲームを作成していますが、クライアントが無効なパケットを送信するとクラッシュします。クライアントが無効なパケットを送信したときにNode.jsがクラッシュする

サーバー:

msg.readFloatLE(1, true); 

クライアント:サーバーがフロートを待っているが、クライアントがintを送信した場合

msg.setUint8(1, 1); 

そう、それはこのエラーでクラッシュ:

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

私はws libraryを使用していますが、私はそれがnode.jsに関するものだと確信しています。どうすればこの問題を解決できますか?

+0

なぜfloatを読み込んでいますか?intを設定していますか? –

+0

@SterlingArcher私はサーバーがクラッシュするかどうかを見たいと思っていました。誰もintとcrashサーバーを簡単に設定できます。 – user234

+0

カスタムラッパーですか?私はwsでこれらのメソッドが表示されません。 – Lazyexpert

答えて

1

@Vedが彼の答えで指摘したようにあなたはtrycatch

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

しかし、それはtryキャッチでとても醜いように見えます。それを取り除く他の方法はありませんか? – user234

+2

あなたは冗談ですか?ここで醜いのは何ですか?それは我々が例外を処理する方法です。 – Ved

+0

**注**:try/catchは、@ snovakovicの答えで指摘されているように、第2パラメータなしでのみ動作します。 – user234

0

を使用して例外を処理することができます - キャッチが最善のアプローチだろう/してみてください。あなたはそれが明確にそれはあなたの例のために例外をスロー言うreadFloatLEのノードのドキュメントを見てみた場合

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

は、標準ではない何かを提案します。

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

あなたはドキュメントhere

を見てみることができます質問正確にあなたが達成しようとしない何ですか?それのための正しい道具のreadFloatLEはありますか?

関連する問題