Python [Errno 98]地址已在使用中

时间:2010-12-16 22:24:24

标签: python sockets connection errno

在我的Python套接字程序中,我有时需要使用 Ctrl-C 来中断它。当我这样做时,它会使用socket.close()关闭连接。

但是,当我尝试重新打开它时,我必须等待一段时间才能再次连接。如何正确关闭套接字?或者是这个意图吗?

12 个答案:

答案 0 :(得分:97)

是的,这是有目的的。在这里,您可以阅读detailed explanation。可以通过在套接字上设置SO_REUSEADDR选项来覆盖此行为。例如:

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

答案 1 :(得分:22)

$ ps -fA | grep python
501 81211 12368   0  10:11PM ttys000    0:03.12  
python -m SimpleHTTPServer

$ kill 81211

答案 2 :(得分:15)

如果在SocketServer模块中使用TCPServer,UDPServer或其子类,则可以设置此类变量(在实例化服务器之前):

SocketServer.TCPServer.allow_reuse_address = True

(通过SocketServer.ThreadingTCPServer - Cannot bind to address after program restart

这会导致 init (构造函数):

 if self.allow_reuse_address:
     self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

答案 3 :(得分:3)

一个对我有用的简单解决方案是关闭终端,然后重新启动。

答案 4 :(得分:3)

首先使用此命令找到python进程ID

ps -fA | grep python

通过在第二列

上命名python进程,您将获得一个pid编号

然后使用此命令终止进程

kill -9 pid

答案 5 :(得分:2)

在调用HTTPServer(('',443),myHandler)之前,除了使用此命令运行子进程外,没有什么比这更有用了:

kill -9 $(lsof -ti tcp:443)

当然这只适用于类似Linux的操作系统!

答案 6 :(得分:1)

因为您尝试在已经运行的同一端口中运行服务。

之所以会发生,是因为您的服务没有在进程堆栈中停止。你必须杀死他们

这是一条用于杀死所有正在运行的python进程的命令。

对于基于Linux的操作系统:

kill -9 (ps -A | grep python | awk '{print $1}')

答案 7 :(得分:1)

运行命令

fuser -k (port_number_you_are _trying_to_access)/TCP

烧瓶的示例:fuser -k 5000/tcp

此外,请记住当您通过ctrl + z进行插入时会出现此错误。所以要终止使用ctrl + c

答案 8 :(得分:0)

出现相同的错误:
遵循的步骤:
1-二手$ ps -fA | grep python
2-杀死了所有进程
3-封闭端子
4-释放并启动了该应用程序(mkchromecast)。
5-没有收到此错误消息。

有另一个问题。 跟进。

答案 9 :(得分:0)

我在运行 python 的 Raspberry Pi 上遇到了同样的问题(Err98 地址已在使用),用于特斯拉壁式连接器的 EV 充电管理器。该软件以前一直很好,但有一天它停止询问太阳能逆变器,我花了几天时间认为这是我在 python 中完成的事情。事实证明,根本原因是 Wifi 调制解调器为太阳能逆变器分配了一个新的动态 IP,这是我家中引入新智能电视的结果。我更改了 python 代码以反映我从 wifi 调制解调器和宾果游戏中找到的新 IP 地址,问题已解决。

答案 10 :(得分:0)

我在 odoo 服务器上遇到了类似的错误,并通过以下简单的步骤解决了这个问题:

  1. 在终端粘贴以下代码

    ps -fA |蟒蛇

你会得到一个pid号。现在从终端输出的第二列复制pid号。

  1. 然后写成如下

    kill -9 pid

终端将重新启动然后命令

flask run

会正常工作! 谢谢

答案 11 :(得分:-2)

sudo pkill -9 蟒蛇

试试这个命令