博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Nodejs检测端口是否被占用
阅读量:7049 次
发布时间:2019-06-28

本文共 1426 字,大约阅读时间需要 4 分钟。

2016-04-11

Nodejs检测端口是否被占用

开启本地服务时,有这么一种情况:当前端口已经被另一个项目使用了,导致服务开启失败。

那么接下来,我们通过简简单单的十行代码来检测端口是否已经被占用。

思路

想要知道端口是否被占用,我们可以开启一个新的服务并监听该端口,若开启成功则说明端口未被占用,反之该端口已经被其他程序使用了。

基本思路有了,下面我们开始编写代码。

基础代码

portIsOccupied.js

var net = require('net')// 检测端口是否被占用function portIsOccupied (port) {  // 创建服务并监听该端口  var server = net.createServer().listen(port)  server.on('listening', function () { // 执行这块代码说明端口未被占用    server.close() // 关闭服务    console.log('The port【' + port + '】 is available.') // 控制台输出信息  })  server.on('error', function (err) {    if (err.code === 'EADDRINUSE') { // 端口已经被使用      console.log('The port【' + port + '】 is occupied, please change other port.')    }  })}// 执行portIsOccupied(1987)

测试

执行 node portIsOccupied.js,正常情况下会输出 The port【1987】 is available.

使用ssr将当前目录设置成静态服务器,关于ssr的使用可以在这里找到 ,

ssr默认会开启 1987 端口。

这时,再次执行 node portIsOccupied.js,输出 The port【1987】 is occupied, please change other port.

让程序更加完美

到这里为止,我们已经能够检测端口是否被占用。

但是,假如我要检测另外一个端口,每次都得更改文件的端口号,相当的麻烦。
那么有没有更加完美的实现方法呢?当然有!

Nodejs中,有这么一个好玩的东西 process.argv,它是一个数组,前两个值分别是node程序所在位置和当前运行的文件所在位置。

神奇的是,我们运行程序时,所传的参数可以通过 process.argv 得到。
比如这样子 node portIsOccupied.js -p 1987,那么会将 -p 和 1987 添加到 process.argv 数组的末尾。
知道了原理,下面我们来编写更加完美的程序吧。

控制台给程序传参

修改 portIsOccupied(1987) 为:

var port = 80 // 默认检测80端口if (process.argv[2] === '-p') {  port = parseInt(process.argv[3])}portIsOccupied(port)

执行

node portIsOccupied.js -p [port]

其中 [port] 是你想要检测的端口。

我的博客

欢迎在我的博客浏览本篇文章,地址

转载地址:http://xccol.baihongyu.com/

你可能感兴趣的文章
【汉字乱码】IE下GET形式传递汉字。
查看>>
解决使用BottomSheetDialog时状态栏变黑的问题
查看>>
DRBD--监控篇
查看>>
nova 配置文件
查看>>
友元函数
查看>>
SATA接口,IDE接口的区别和特点
查看>>
Android开发实践:用脚本编译Android工程
查看>>
网络安全系列之三十一 组策略中的用户权限分配
查看>>
SSRS 2012 Report Items -- 列表
查看>>
xenserver安装小记
查看>>
MDI子窗口间的数据共享
查看>>
MySQL数据库安全资源
查看>>
linux 磁盘管理下(LVM逻辑卷创建和管理,磁盘配额设置方法以及小技巧)
查看>>
用schemaSpy制作数据库文档
查看>>
Windows Server入门系列36 NTFS权限的应用规则
查看>>
redhat as 6.2 memcached安装总结
查看>>
Django 缓存方案
查看>>
Go基础--终端操作和文件操作
查看>>
Extjs中columnwidth与anchor的使用
查看>>
Windows Server群集感知更新(CAU)-中
查看>>