3

我正在使用 .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 自己说它仍然很糟糕。

4

2 回答 2

8

您需要侦听套接字上的错误。Node 具有默认行为,当某些事情发生时.emit('error'),如果没有附加错误处理程序,它将throw改为错误,从而使应用程序崩溃。

var server = net.createServer(function (socket) {
    socket.on('error', function(err){
        // Handle the connection error.
    });
});
于 2013-05-12T15:26:13.330 回答
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 部分的错误处理。

于 2013-05-12T06:13:21.770 回答