錯誤原因:與客戶端的Socket被客戶端強行被斷開,而服務器還企圖read。
const net=require('net');
var tcp=net.createServer((socket)=>{
console.log('someone connects.');
socket.on('data',(d)=>{
//數據到達:d
});
socket.on('close',()=>{
//當socket鏈接被關閉
console.log("close");
});
/*======錯誤原因是沒有on error事件,需要綁定,添加下邊這個on error事件即可======*/
socket.on('error',(err)=>{
console.log(err);
});
});
tcp.on('error', (err) => {
console.log(err);
});
tcp.listen(3600,"127.0.0.1",()=>{
console.log('serv started. listen on http://127.0.0.1:3600/');
})
解決方法:在createServer裏的Socket綁定error事件即可,不然出現錯誤會throw,而throw會中斷程序。
socket變量名.on('error',(err)=>{
console.log(err);
});
PS_0:建議如上一樣,給創建的Server也綁定error事件,不然也有可能出現未知錯誤導致程序終止。另外,需要給用戶Socket提交的數據解析添加trycatch,防止意外中斷程序,畢竟也存在一些人把客戶端逆向瞭然後嘗試越權獲取一些數據或者提交惡意數據的可能。
PS_1:關於throw中斷,你可以做個小實驗,運行之後你會發現,123456789打印不出來,console裏只有throw
throw "123";
console.log(123456789);