我的项目是用Nodejs编写的。我需要知道如何检查带端口的IP是否正在连接。
EX: 检查example1.com 443 => true; 检查example1.com 8080 => false
由于
答案 0 :(得分:7)
了解服务器/端口是否可用的唯一方法是尝试实际连接到它。如果您知道服务器响应ping,您可以在服务器上运行ping,但这只是告诉您主机是否正在运行并响应ping,它不会直接告诉您是否要进行服务器进程连接正在运行并接受连接。
实际知道它正在运行并接受连接的唯一方法是实际连接到它并报告它是否成功(注意这是一个异步操作):
var net = require('net');
var Promise = require('bluebird');
function checkConnection(host, port, timeout) {
return new Promise(function(resolve, reject) {
timeout = timeout || 10000; // default of 10 seconds
var timer = setTimeout(function() {
reject("timeout");
socket.end();
}, timeout);
var socket = net.createConnection(port, host, function() {
clearTimeout(timer);
resolve();
socket.end();
});
socket.on('error', function(err) {
clearTimeout(timer);
reject(err);
});
});
}
checkConnection("example1.com", 8080).then(function() {
// successful
}, function(err) {
// error
})
答案 1 :(得分:1)
尝试此代码后的一个小更正。使用 socket.end()
总是会导致连接重置错误,从而调用 resolve 和 reject。如果您在经典回调中使用此代码,请改用 socket.destroy()
答案 2 :(得分:-1)
我知道的唯一方法是从外部机器连接。如果您在linux终端上,可以使用netcat检查您的服务是否正在运行。
nc example.com 8080