【Python】端口号脚本,避免端口号冲突 |
您所在的位置:网站首页 › socket端口占用 › 【Python】端口号脚本,避免端口号冲突 |
文章目录
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 |