我正在使用.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在一年前说他是自己的,它仍然很不舒服。
答案 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部分的错误处理。