【Python】端口号脚本,避免端口号冲突

您所在的位置:网站首页 socket端口占用 【Python】端口号脚本,避免端口号冲突

【Python】端口号脚本,避免端口号冲突

#【Python】端口号脚本,避免端口号冲突 | 来源: 网络整理| 查看: 265

文章目录 1. 思路 2. 代码实现 3. 端口号使用 1. 思路

使用像socket模块,需要绑定端口号时,端口号被占用,则会导致端口号冲突。

对于频繁使用端口号,导致端口号冲突,解决方案可以是自动获取未冲突的端口号,并绑定这个端口号。

思路如下:

编写一个get_port.py脚本,内部封装一个函数get_port(),每次调用该函数就会获取一个新的端口号,端口号递增一。 get_port()获取的端口号给定一个范围[initPort, endPort],为了避免端口号冲突,这个范围不包含本机上现有的端口号。 走完一遍从initPort到endPort后,重置端口号为initPort,复用端口号,避免获取的端口号无限递增。 2. 代码实现

新建get_port.py文件,内容如下:

import os portFile = 'port.txt' # 端口号文件 initPort = '10001' # 初始端口号 endPort = '10010' # 结束端口号 # 创建端口号文件,并写入初始端口号 def create_port_file(): with open(portFile, 'w') as f: f.write(initPort) # 获取端口号 def get_port(): if not os.path.exists(portFile): # 端口号文件不存在则创建 create_port_file() with open(portFile, 'r') as f: port = f.read() update_port(port) if port == endPort: # 重置端口号 create_port_file() print("The current port number: {}".format(port)) return int(port) # 更新端口号 def update_port(oldPort): newPort = int(oldPort) + 1 with open(portFile,'w') as f: port = f.write(str(newPort)) if __name__ == "__main__": for i in range(15): get_port()

运行结果如下:

The current port number: 10001 The current port number: 10002 The current port number: 10003 The current port number: 10004 The current port number: 10005 The current port number: 10006 The current port number: 10007 The current port number: 10008 The current port number: 10009 The current port number: 10010 The current port number: 10001 The current port number: 10002 The current port number: 10003 The current port number: 10004 The current port number: 10005 3. 端口号使用

在get_port.py同级目录下新建test.py,并导入该get_port模块,并使用get_port()函数。

test.py文件内容如下:

import socket from get_port import get_port # 导入get_port模块 s = socket.socket() # 创建socket对象 host = socket.gethostname() # 获取本地主机名 port = get_port() # 使用get_port模块的get_port()函数 s.bind((host, port)) # 绑定端口


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3