利用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 相关文章推荐
jQuery validate 中文API 附validate.js中文api手册
Jul 31 Javascript
node.js中的console.warn方法使用说明
Dec 09 Javascript
详解javascript中的事件处理
Nov 06 Javascript
简单的jQuery banner图片轮播实例代码
Mar 04 Javascript
DIV+CSS+jQ实现省市联动可扩展
Jun 22 Javascript
javascript 内置对象及常见API详细介绍
Nov 01 Javascript
jQuery点击弹出层弹出模态框点击模态框消失代码分享
Jan 21 Javascript
js+canvas实现验证码功能
Sep 21 Javascript
快速解决vue在ios端下点击响应延时的问题
Aug 27 Javascript
Vue-router的使用和出现空白页,路由对象属性详解
Sep 03 Javascript
深入分析JavaScript 事件循环(Event Loop)
Jun 19 Javascript
Element Cascader 级联选择器的使用示例
Jul 27 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
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上传图片到指定位置路径保存到数据库的具体实现
2013/12/30 PHP
php判断是否为json格式的方法
2014/03/04 PHP
跟我学Laravel之视图 & Response
2014/10/15 PHP
PHP实现的简单mock json脚本分享
2015/02/10 PHP
PHP共享内存用法实例分析
2016/02/12 PHP
JavaScript中number转换成string介绍
2014/12/31 Javascript
JS动态修改图片的URL(src)的方法
2015/04/01 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
JavaScript的instanceof运算符学习教程
2016/06/08 Javascript
vue里面父组件修改子组件样式的方法
2018/02/03 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
微信小程序结合Storage实现搜索历史效果
2019/05/18 Javascript
小程序双头slider选择器的实现示例
2020/03/31 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
Python实现的多线程http压力测试代码
2017/02/08 Python
python导入csv文件出现SyntaxError问题分析
2017/12/15 Python
python 通过手机号识别出对应的微信性别(实例代码)
2019/12/22 Python
CSS3教程:边框属性border的极致应用
2009/04/02 HTML / CSS
HTML5高仿微信聊天、微信聊天表情|对话框|编辑器功能
2018/04/23 HTML / CSS
微信小程序canvas实现水平、垂直居中效果
2020/02/05 HTML / CSS
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
Linux管理员面试经常问道的相关命令
2014/12/12 面试题
思想政治教育专业个人求职信范文
2013/12/20 职场文书
《雕塑之美》教学反思
2014/04/24 职场文书
本科毕业生自荐信
2014/05/26 职场文书
电子商务求职信
2014/06/15 职场文书
学校关爱留守儿童活动方案
2014/08/27 职场文书
向国旗敬礼活动总结范文2014
2014/09/27 职场文书
高中生思想道德自我评价
2015/03/09 职场文书
旅游投诉信范文
2015/07/02 职场文书
运输公司工作总结
2015/08/11 职场文书
九年级英语教学反思
2016/02/15 职场文书
一年级下册数学教学反思
2016/02/16 职场文书
详细聊聊关于Mysql联合查询的那些事儿
2021/10/24 MySQL
Python OpenCV实现图像模板匹配详解
2022/04/07 Python