我正在使用python在linux系统中寻找免费的tcp端口。 我使用这段代码
from contextlib import closing
def find_free_port():
with closing(socket.socket(socket.AF_INET, socket.SOCK_STREAM)) as s:
s.bind(('', 0))
return s.getsockname()[1]
if __name__ == "__main__":
print(find_free_port())
有时候我会收到这个问题
File "test_script.py", line 10, in <module>
print(find_free_port())
File "test_script.py", line 6, in find_free_port
s.bind(('', 0))
OSError: [Errno 98] Address already in use
为什么?
答案 0 :(得分:0)
一种解决方案是杀死已在使用的端口,然后再次使用它。要杀死Linux中的特定端口,请使用以下命令:
sudo fuser -k Port_Number/tcp
例如:您的情况如下:
sudo fuser -k 98/tcp
但是要回答您的问题,我想下面的代码将帮助您找到所有可用的tcp端口:
from contextlib import closing
import socket
for port in range(1, 8081):
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
res = sock.connect_ex(('localhost', port))
if res == 0:
print (port)