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

前言

在学习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]

总结

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

(0)

相关推荐

  • Node.js检测端口(port)是否被占用的简单示例

    前言 在网络技术中,端口(Port)大致有两种意思:一是物理意义上的端口,比如,ADSL Modem.集线器.交换机.路由器用于连接其他网络设备的接口,如RJ-45端口.SC端口等等.二是逻辑意义上的端口,一般是指TCP/IP协议中的 端口,端口号的范围从0到65535,比如用于浏览网页服务.这篇文章的目的是为了解决ssr工具起多个服务的时候端口被占用的情况,下面跟大家分享研究的代码片段,有需要的可以参考借鉴. 示例代码 // 检测port是否被占用 function probe(port, c

  • node.js实现端口转发

    本文为大家分享的是node.js端口转发实现代码,供大家参考,具体内容如下 #!/sbin/node var net = require('net'); function proxyPort(srcport,destServer,destport) { var server = net.createServer(function(c) { //'connection' listener c.on('end', function() { console.log('src disconnected'

  • 详解node如何让一个端口同时支持https与http

    众所周知node是一个高性能的web服务器,使用它可以很简单的创建一个http或https的服务器. 比如一个很简单的http服务器: var http = require('http'); var https = require('https'); var httpPort = 3345; var server = http.createServer(function(req, res){ res.writeHead(200, {'Content-Type': 'text/plain'});

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

    前言 在学习tcp/ip的时候,经常遇到一些关于跟端口有关的东西,在写网络上的一些东西,有时用的一些端口被提示:端口已被占用,啊啊啊,挺郁闷的,然后就想着将它搞明白,下面话不多说了,来一起看看详细的介绍吧. Nodejs检测端口是否被占用 开启本地服务时,有这么一种情况:当前端口已经被另一个项目使用了,导致服务开启失败. 那么接下来,我们通过简简单单的十行代码来检测端口是否已经被占用. 思路 想要知道端口是否被占用,我们可以开启一个新的服务并监听该端口,若开启成功则说明端口未被占用,反之该端口已

  • 利用node.js实现自动生成前端项目组件的方法详解

    本文主要给大家介绍了关于利用node.js实现自动生成前端项目组件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍: 脚本编写背景 写这个小脚本的初衷是,项目本身添加一个组件太繁琐了,比如我想要去建立一个login的组件,那么我需要手动去IDE中,创建index.js(组件出口文件),login.js(业务文件),login.html,login.less这四个文件.因为每个组件都有一些输出的代码,还要把之前组件的那几行拷贝过来,这种作业真的烦,于是乎写了一个小脚本去自动

  • 利用node.js实现反向代理的方法详解

    本文主要给大家介绍的是关于利用node.js实现反向代理的相关内容,分享出供大家参考学习,下面话不多说,来一起看看详细的介绍: 跨域问题是前端开发很常见的问题解决方案有很多种 jsonp返回 Access-Control-Allow-Origin:'*' (需要注意的是 对于post请求会变成option请求需求后端支持) 前端添加代理 前端添加代理 以vue-cli为例,前端添加代理 dev: { env: require('./dev.env'), port: 8888, autoOpenB

  • 如何利用Node.js与JSON搭建简单的动态服务器

    一.创建html页面 创建4个页面,index.html.register.html.sign_in.html.home.html index.html 默认主页 register.html 用于注册账号 sign_in.html 用于登录账号 home.html 用于显示登录后的页面 主要代码片段 register.html <form id="registerForm"> <div> <label for="">用户名:<

  • 利用Node.JS实现邮件发送功能

    第一步.配置篇 首先需要安装nodemailer库 npm install nodemailer//默认会安装最新的版本. 关于这个库的文档参见nodemailer 第二步.库的一些使用介绍 这个库使用方法很简单的.首先是要创建一个用于发送邮件的实例 var transporter = nodemailer.createTransport(transport[, defaults]) transport参数属性 属性太多了就只写一些关键的属性 port:连接的端口号,一般就是465 host:你

  • 利用node.js本地搭建HTTP服务器

    我们的目的比较简单,利用node.js在本地搭建HTTP服务器,实现hello word. 系统环境: win7 64bitIP:127.0.0.1Node.js:v6.10.2Npm:3.10.10Git:2.12.2.2-64-bit 基本安装: 1.Node.js安装包及源码下载地址为:https://nodejs.org/en/download/ Git下载地址为:https://git-scm.com/download/win. 2.按照安装提示操作即可,选择安装路径.npm. 3.环

  • c#检测端口是否被占用的简单实例

    当我们要创建一个Tcp/Ip Server connection ,我们需要一个范围在1000到65535之间的端口 . 但是本机一个端口只能一个程序监听,所以我们进行本地监听的时候需要检测端口是否被占用. 命名空间System.Net.NetworkInformation下定义了一个名为IPGlobalProperties的类,我们使用这个类可以获取所有的监听连接,然后判断端口是否被占用,代码如下: 复制代码 代码如下: public static bool PortInUse(int por

  • 易语言检测端口是否被占用的代码

    检测端口是否被占用的代码 .版本 2 .程序集 窗口程序集_启动窗口 .子程序 检测端口, 整数型, , 如果被占用返回进程PID .参数 端口, 整数型, 可空 .参数 信息, 文本型, 参考 可空 .局部变量 I, 整数型 .局部变量 PID, 整数型 写到文件 ("Get.bat", 到字节集 ("netstat -aon|findstr " + #引号 + 到文本 (端口) + #引号 + " >>Bin")) .如果真 (运

  • 利用node.js开发cli的完整步骤

    CLI介绍 命令行界面(英语:command-line interface,缩写:CLI),是在图形用户界面得到普及之前使用最为广泛的用户界面,它通常不支持鼠标,用户通过键盘输入指令,计算机接收到指令后,予以执行. 目前前端开发中,CLI是常用的工具.前端三大框架Vue.React.Angular都有对应的CLI,包括现在最流行的前端工程化的打包工具Webpack,也有对应的webpack-cli. 在现代的前端开发中,CLI提高了开发的效率.让相应的前端开发者免去了大量的重复性操作,节省了大量

随机推荐