为什么我在运行'net'模块node.js时遇到此错误

时间:2013-05-12 04:53:27

标签: javascript node.js sockets

我正在使用.net模块化并在6112上打开tcp端口。

var net = require('net');
    var server = net.createServer(function (socket) { //'connection' listener
    });
server.listen(6112, function () { //'listening' listener
    console.log('server started');
});

在同一台机器上,我在main中启动一个java套接字。

public static void main(String[] args) {
        // TODO Auto-generated method stub

        try {
            System.out.println("Connecting...");
            Socket socket = new Socket("localhost", 6112);
            System.out.println("Connected");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

我得到了这个例外,

C:\Users\Mustafa\WebstormProjects\Node.Js>node hello.js
server started

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: read ECONNRESET
    at errnoException (net.js:884:11)
    at TCP.onread (net.js:539:19)

这是一个错误还是什么,因为如果我遇到这个错误,我会非常感谢。

我没有使用调试器的原因,因为Ryan在一年前说他是自己的,它仍然很不舒服。

2 个答案:

答案 0 :(得分:8)

您需要侦听套接字上的错误。节点具有默认行为,当某些内容.emit('error')时,如果没有附加错误处理程序,则会throw错误,从而导致应用程序崩溃。

var server = net.createServer(function (socket) {
    socket.on('error', function(err){
        // Handle the connection error.
    });
});

答案 1 :(得分:0)

您正在创建一个套接字并从中进行连接,但不是关闭它。因此,当程序完成时,对于node.js,它看起来像是重置连接(突然关闭)。在节目结束前致电socket.close();

您可以通过以下方式构建代码:

try {
    tryStatements      //your code that is causing exceptions
}
catch(exception){
    catchStatements    //handle caught exceptions
}
finally {
    finallyStatements  //execute it anyways
}

或者,如果您想从运行时捕获未捕获的异常,请使用此方法(主进程不会在异常时退出)

process.on('uncaughtException', function(err) {
    console.log('Caught exception: ' + err);
    console.log(err.stack);
});

问题在于java代码导致node.js在异常时退出。所以一定要添加socket.close();。以上只是node.js部分的错误处理。