使用Python测试端口是否正在使用的快速方法

dir*_*ion 9 python sockets

我有一个python服务器,可以监听几个套接字.在启动时,我尝试在侦听之前连接到这些套接字,因此我可以确定没有其他任何东西已经在使用该端口.这增加了我的服务器启动大约三秒钟(没有测试大约.54秒),我想减少它.由于我只测试localhost,我认为大约50毫秒的超时时间就足够了.不幸的是,socket.setdefaulttimeout(50)方法由于某种原因似乎不起作用.

我怎么能减少它?

Rug*_*nar 17

这是一个检查功能正在使用的端口

def is_port_in_use(port):
    import socket
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
        return s.connect_ex(('localhost', port)) == 0
Run Code Online (Sandbox Code Playgroud)

来源:https://codereview.stackexchange.com/questions/116450/find-available-ports-on-localhost

  • 该答案与已经运行的服务交互。这不一定是您想要的。 (2认同)

Sti*_* OK 13

以下是如何检查端口是否被占用的示例.

import socket, errno

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

try:
    s.bind(("127.0.0.1", 5555))
except socket.error as e:
    if e.errno == errno.EADDRINUSE:
        print("Port is already in use")
    else:
        # something else raised the socket.error exception
        print(e)

s.close()
Run Code Online (Sandbox Code Playgroud)

  • 不工作.此代码未检测到端口实际上正在使用中. (2认同)

Sim*_* B. 9

如何尝试绑定到您想要的端口,并处理错误情况如果端口被占用?(如果问题是您可能会启动相同的服务两次,那么请不要查看开放端口.)

  • 这当然是最有意义的,但是当我将相同的端口绑定两次时,我无法得到错误的东西. (4认同)