Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 在nodejs中,如何检查端口是否正在侦听或正在使用_Node.js_Sockets - Fatal编程技术网

Node.js 在nodejs中,如何检查端口是否正在侦听或正在使用

Node.js 在nodejs中,如何检查端口是否正在侦听或正在使用,node.js,sockets,Node.js,Sockets,我在这里将非常具体,希望了解这一点的人可以编辑,以适应一般情况 当前,当您运行“节点调试”时,它会生成一个进程来侦听端口5858。然后在父端口中,尝试连接到该端口 但是,如果正在运行另一个“节点调试”会话,则当前“节点调试”将挂起,因为该端口正在使用中 具体而言,您看到的信息是: $ node debug example/gcd.js 3 5 < debugger listening on port 5858 > connecting... $node调试示例/gcd.js 3

我在这里将非常具体,希望了解这一点的人可以编辑,以适应一般情况

当前,当您运行“节点调试”时,它会生成一个进程来侦听端口5858。然后在父端口中,尝试连接到该端口

但是,如果正在运行另一个“节点调试”会话,则当前“节点调试”将挂起,因为该端口正在使用中

具体而言,您看到的信息是:

 $ node debug example/gcd.js 3 5
< debugger listening on port 5858 >
connecting...
$node调试示例/gcd.js 3 5

连接。。。
最好是检测端口正在使用中(没有连接到它,这可能会使另一个试图连接现有调试器的客户端陷入混乱)

编辑:接受的解决方案现在处于和中


另请参见,您应该能够使用来检测正在侦听的端口。不幸的是,它似乎只支持Windows和Linux。然而,使it支持OSX所需的更改看起来并不是非常大。更新:它现在支持OS X…呃macOS…呃,不管他们现在叫它什么。

我使用的是下面的一个变体:

var net=require('net');
var portInUse=函数(端口,回调){
var server=net.createServer(函数(套接字){
socket.write('Echo server\r\n');
插座。管道(插座);
});
server.on('error',函数(e){
回调(true);
});
server.on('listening',函数(e){
server.close();
回调(假);
});
侦听(端口“127.0.0.1”);
};
端口(5858,函数(返回值){
console.log(返回值);
});使用内部http模块:

const isPortFree=port=>
新承诺(解决=>{
const server=require('http')
.createServer()文件
.侦听(端口,()=>{
server.close()
解析(真)
})
.on('错误',()=>{
解析(false)
})
})

您可以尝试在端口上监听,看看是否返回了
EADDRINUSE
错误。@robertklep虽然这是正确的想法,但我一直在寻找特定的代码。谢谢您的插件。我是
节点netstat
的作者,我只想提及它支持OS X。看起来这会创建或尝试创建一个新的东西,在端口上侦听,无论多么简短。我认为:“最好是它检测到端口正在使用中(没有连接到它,这可能会使另一个试图连接现有调试器的客户端陷入混乱)。”。这也是另一个客户端的树,该客户端正在尝试建立连接以侦听端口。对于我来说,总是返回false,安装了net,并且可以通过telnet访问端口。我做错了什么?