如何用Python强制操作系统释放端口

3 投票
1 回答
4039 浏览
提问于 2025-04-18 03:46


我在我的Python程序中使用了一个端口,然后把它关闭了,现在我想再次使用这个端口,而不是其他的端口。
有没有什么办法可以强制操作系统释放这个端口,让我在Python中再次使用?

#!/usr/bin/python           # This is server.py file 

import socket               # Import socket module

s = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name
port = 12349
portt = 12341               # Reserve a port for your service.

s.bind((host, portt))        # Bind to the port

s.connect((host, port))
s.close

ss = socket.socket()         # Create a socket object
host = socket.gethostname() # Get local machine name 
ss.bind((host, portt))

s.close

但是输出是:

Traceback (most recent call last):
  File "client.py", line 17, in <module>
    ss.bind((host, portt))
  File "/usr/lib/python2.7/socket.py", line 224, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use

1 个回答

4

你永远无法强迫操作系统(用任何合理的方式)释放一个套接字。

相反,你只需要通过setsockopt来告诉它你不在乎。

s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

这意味着这个选项是在Socket Object Level SOCKET层面上设置的(而不是TCP或其他什么),你正在设置Socket Option REUSEADDR(也就是在告诉操作系统,没问题,你确实想在这里监听)。最后,你用1来打开这个选项,而不是用0来关闭它。

撰写回答