net Node.js错误:读取ECONNRESET(在Windows上)

时间:2014-04-06 16:52:52

标签: node.js

我正在尝试使用Node.js中的net lib来进行简单的消息传递。在Nodejs.org上的example中,他们提供以下代码作为基本的echo服务器:

var net = require('net');
var server = net.createServer(function(c) { //'connection' listener
  console.log('server connected');
  c.on('end', function() {
    console.log('server disconnected');
  });
  c.write('hello\r\n');
  c.pipe(c);
});
server.listen(8124, function() { //'listening' listener
  console.log('server bound');
});

和所述服务器的客户端:

var net = require('net');
var client = net.connect({port: 8124},
    function() { //'connect' listener
  console.log('client connected');
  client.write('world!\r\n');
});
client.on('data', function(data) {
  console.log(data.toString());
  client.end();
});
client.on('end', function() {
  console.log('client disconnected');
});

但是,上面的示例有效,如果从客户端代码中删除client.end();并强制关闭客户端上的脚本(模拟客户端崩溃),服务器也会崩溃并出现错误:

Error: read ECONNRESET
    at errnoException (net.js:904:11)
    at TCP.onread (net.js:558:19)

我尝试使用c.on("error",function(){})server.on('error', function (e) {});来捕获服务器代码中的错误,但在这两种情况下,当客户端断开连接而不使用client.end()时,服务器仍会崩溃

检查此错误的方法是什么,以便服务器执行console.log('connection reset by peer')而不是崩溃?

更新: 我在我的linux机器上尝试了相同的代码,它看起来工作正常......那么为什么它在Linux中工作但不在Windows中工作?

1 个答案:

答案 0 :(得分:2)

您可以通过在您的'createServer'函数中添加此代码来捕获该错误:

process.on('uncaughtException', function (err) {
    console.error(err.stack);
    console.log("Node NOT Exiting...");
});