利用Node.js检测端口是否被占用的方法


Posted in Javascript onDecember 07, 2017

前言

在学习tcp/ip的时候,经常遇到一些关于跟端口有关的东西,在写网络上的一些东西,有时用的一些端口被提示:端口已被占用,啊啊啊,挺郁闷的,然后就想着将它搞明白,下面话不多说了,来一起看看详细的介绍吧。

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的使用可以在这里找到 https://github.com/jaywcjlove/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)

执行

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

node portIsOccupied.js -p [port]

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript 和 Java 的区别浅析
Jul 31 Javascript
通过pjax实现无刷新翻页(兼容新版jquery)
Jan 31 Javascript
JavaScript中奇葩的假值示例应用
Mar 11 Javascript
JS+CSS实现大气清新的滑动菜单效果代码
Oct 22 Javascript
jquery Deferred 快速解决异步回调的问题
Apr 05 Javascript
jQuery插件Validation快速完成表单验证的方式
Jul 28 Javascript
通过修改360抢票的刷新频率和突破8车次限制实现方法
Jan 04 Javascript
浅析java线程中断的办法
Jul 29 Javascript
微信小程序实现slideUp、slideDown滑动效果及点击空白隐藏功能示例
Dec 11 Javascript
JQuery搜索框自动补全(模糊匹配)功能实现示例
Jan 08 jQuery
通过npm或yarn自动生成vue组件的方法示例
Feb 12 Javascript
vue 实现上传组件
May 31 Vue.js
禁止弹窗中蒙层底部页面跟随滚动的几种方法
Dec 07 #Javascript
Vue通过URL传参如何控制全局console.log的开关详解
Dec 07 #Javascript
Vue中添加手机验证码组件功能操作方法
Dec 07 #Javascript
react学习笔记之state以及setState的使用
Dec 07 #Javascript
React Native 截屏组件的示例代码
Dec 06 #Javascript
判断jQuery是否加载完成,没完成继续判断的解决方法
Dec 06 #jQuery
mui back 返回刷新页面的实例
Dec 06 #Javascript
You might like
有关php运算符的知识大全
2011/11/03 PHP
Linux下创建nginx脚本-start、stop、reload…
2014/08/03 PHP
PHP之autoload运行机制实例分析
2014/08/28 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
PHP使用Face++接口开发微信公众平台人脸识别系统的方法
2015/04/17 PHP
PHP中strcmp()和strcasecmp()函数字符串比较用法分析
2016/01/07 PHP
PHP编程基本语法快速入门手册
2016/01/07 PHP
YII框架常用技巧总结
2019/04/27 PHP
jquery ajax abort()的使用方法
2010/10/28 Javascript
JS运行耗时操作的延时显示方法
2010/11/19 Javascript
基于jquery的button默认enter事件(回车事件)。
2011/05/18 Javascript
关于图片按比例自适应缩放的js代码
2011/10/30 Javascript
Javascript 中的 call 和 apply使用介绍
2012/02/22 Javascript
图片上传判断及预览脚本的效果实例
2013/08/07 Javascript
node.js正则表达式获取网页中所有链接的代码实例
2014/06/03 Javascript
JavaScript检测浏览器cookie是否已经启动的方法
2015/02/27 Javascript
简单实现nodejs上传功能
2017/01/14 NodeJs
javascript设计模式之中介者模式学习笔记
2017/02/15 Javascript
js中new一个对象的过程
2017/02/20 Javascript
bootstrap模态框嵌套、tabindex属性、去除阴影的示例代码
2017/10/17 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
快速搭建vue2.0+boostrap项目的方法
2018/04/09 Javascript
JS获取并处理php数组的方法实例分析
2018/09/04 Javascript
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
Python数据类型详解(三)元祖:tuple
2016/05/08 Python
Python测试人员需要掌握的知识
2018/02/08 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
Python爬虫:将headers请求头字符串转为字典的方法
2019/08/21 Python
python中从for循环延申到推导式的具体使用
2019/11/29 Python
Python3合并两个有序数组代码实例
2020/08/11 Python
Woods官网:加拿大最古老、最受尊敬的户外品牌之一
2020/09/12 全球购物
中国梦读书活动总结
2014/07/10 职场文书
工作时间擅自离岗检讨书
2014/10/24 职场文书
公证书
2019/04/17 职场文书
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript