利用Node.js檢測端口是否被占用的方法
前言
在學(xué)習(xí)tcp/ip的時候,經(jīng)常遇到一些關(guān)于跟端口有關(guān)的東西,在寫網(wǎng)絡(luò)上的一些東西,有時用的一些端口被提示:端口已被占用,啊啊啊,挺郁悶的,然后就想著將它搞明白,下面話不多說了,來一起看看詳細(xì)的介紹吧。
Nodejs檢測端口是否被占用
開啟本地服務(wù)時,有這么一種情況:當(dāng)前端口已經(jīng)被另一個項目使用了,導(dǎo)致服務(wù)開啟失敗。
那么接下來,我們通過簡簡單單的十行代碼來檢測端口是否已經(jīng)被占用。
思路
想要知道端口是否被占用,我們可以開啟一個新的服務(wù)并監(jiān)聽該端口,若開啟成功則說明端口未被占用,反之該端口已經(jīng)被其他程序使用了。
基本思路有了,下面我們開始編寫代碼。
基礎(chǔ)代碼
portIsOccupied.js
var net = require('net')
// 檢測端口是否被占用
function portIsOccupied (port) {
// 創(chuàng)建服務(wù)并監(jiān)聽該端口
var server = net.createServer().listen(port)
server.on('listening', function () { // 執(zhí)行這塊代碼說明端口未被占用
server.close() // 關(guān)閉服務(wù)
console.log('The port【' + port + '】 is available.') // 控制臺輸出信息
})
server.on('error', function (err) {
if (err.code === 'EADDRINUSE') { // 端口已經(jīng)被使用
console.log('The port【' + port + '】 is occupied, please change other port.')
}
})
}
// 執(zhí)行
portIsOccupied(1987)
測試
執(zhí)行 node portIsOccupied.js,正常情況下會輸出 The port【1987】 is available.
使用ssr將當(dāng)前目錄設(shè)置成靜態(tài)服務(wù)器,關(guān)于ssr的使用可以在這里找到 https://github.com/jaywcjlove/ssr,
ssr默認(rèn)會開啟 1987 端口。
這時,再次執(zhí)行 node portIsOccupied.js,輸出 The port【1987】 is occupied, please change other port.
讓程序更加完美
到這里為止,我們已經(jīng)能夠檢測端口是否被占用。
但是,假如我要檢測另外一個端口,每次都得更改文件的端口號,相當(dāng)?shù)穆闊?br />
那么有沒有更加完美的實現(xiàn)方法呢?當(dāng)然有!
Nodejs中,有這么一個好玩的東西 process.argv,它是一個數(shù)組,前兩個值分別是node程序所在位置和當(dāng)前運行的文件所在位置。
神奇的是,我們運行程序時,所傳的參數(shù)可以通過 process.argv 得到。
比如這樣子 node portIsOccupied.js -p 1987,那么會將 -p 和 1987 添加到 process.argv 數(shù)組的末尾。
知道了原理,下面我們來編寫更加完美的程序吧。
控制臺給程序傳參
修改 portIsOccupied(1987) 為:
var port = 80 // 默認(rèn)檢測80端口
if (process.argv[2] === '-p') {
port = parseInt(process.argv[3])
}
portIsOccupied(port)
執(zhí)行
其中 [port] 是你想要檢測的端口。
node portIsOccupied.js -p [port]
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
Ubuntu22.04系統(tǒng)下升級nodejs到v18版本
ubuntu默認(rèn)安裝的nodejs版本比較老,要安裝到最新的,下面這篇文章主要給大家介紹了關(guān)于Ubuntu22.04系統(tǒng)下升級nodejs到v18版本的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2024-06-06
nodejs利用http模塊實現(xiàn)銀行卡所屬銀行查詢和騷擾電話驗證示例
本篇文章主要介紹了nodejs利用http模塊實現(xiàn)銀行卡所屬銀行查詢和騷擾電話驗證示例,有興趣的可以了解一下。2016-12-12
詳解Node.js amqplib 連接 Rabbit MQ最佳實踐
這篇文章主要介紹了詳解Node.js amqplib 連接 Rabbit MQ最佳實踐,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
node.js使用zlib模塊進(jìn)行數(shù)據(jù)壓縮和解壓操作示例
這篇文章主要介紹了node.js使用zlib模塊進(jìn)行數(shù)據(jù)壓縮和解壓操作,結(jié)合實例形式詳細(xì)分析了node.js基于zlib模塊創(chuàng)建數(shù)據(jù)流以及壓縮和解壓縮等相關(guān)操作技巧,需要的朋友可以參考下2020-02-02

