socket.error:[错误48]使用的地址已socket.error:[错误48]使用的地址已

2019-05-12 12:24发布

我试图建立一个服务器与MAC终端蟒蛇。

我浏览到文件夹位置的使用:

python -m SimpleHTTPServer

但是,这给了我错误:

socket.error: [Errno 48] Address already in use

我以前曾打开使用相同的命令对不同的网站在不同的位置在我的机器的连接。

Answer 1:

您已经绑定到默认端口(8000)的过程。 如果您之前已经跑了相同的模块,它是最有可能的过程中仍然绑定到该端口。 尝试并首先找到其他工艺:

$ ps -fA | grep python
  501 81651 12648   0  9:53PM ttys000    0:00.16 python -m SimpleHTTPServer

命令的参数都包括在内,所以你可以发现一个运行SimpleHTTPServer如果不止一个python进程处于活动状态。 您可能希望测试http://localhost:8000/流露出目录本地文件列表。

第二个数字是进程号; 通过发送一个信号,停止服务器:

kill 81651

此发送一个标准SIGTERM信号; 如果该过程没有响应则可能不得不求助于像发送更强硬的方法SIGKILLkill -s KILL <pid>kill -9 <pid>信号来代替。 参见维基百科了解更多详情 。

可替代地,一个不同的端口上,通过指定在命令行上的备用端口运行服务器:

$ python -m SimpleHTTPServer 8910
Serving HTTP on 0.0.0.0 port 8910 ...

然后访问服务器http://localhost:8910 ; 其中, 8910从1024是任何数量最多,提供的端口是不是已被使用。



Answer 2:

简单的解决方案:

  1. 查找使用端口的进程8080

    sudo lsof -i:8080

  2. 杀死它:

    kill XXXX



Answer 3:

使用

 sudo lsof -i:5000

这会给你的使用的端口,如果任何进程的列表。 一旦进程列表中给出,使用id上的PID列终止过程中使用

 kill 379 #use the provided PID


Answer 4:

顺便说一句,以防止这种情况在第一时间发生的事情,只需按Ctrl + C中端,而SimpleHTTPServer仍在正常运行。 这将“正常”停止服务器,并释放端口,所以你不必找到并重新启动服务器之前再次杀死进程。

(MODS:我曾尝试穿上它所属的最佳答案此评论,但我没有足够的声誉)



Answer 5:

您也可以投放在Python下一个最高的可用端口做这样的事情:

import SimpleHTTPServer
import SocketServer

Handler = SimpleHTTPServer.SimpleHTTPRequestHandler

port = 8000
while True:
    try:
        httpd = SocketServer.TCPServer(('', port), Handler)
        print 'Serving on port', port
        httpd.serve_forever()
    except SocketServer.socket.error as exc:
        if exc.args[0] != 48:
            raise
        print 'Port', port, 'already in use'
        port += 1
    else:
        break

如果你需要做同样的事,其他实用程序,它可以是一个bash脚本,更方便:

#!/usr/bin/env bash

MIN_PORT=${1:-1025}
MAX_PORT=${2:-65535}

(netstat -atn | awk '{printf "%s\n%s\n", $4, $4}' | grep -oE '[0-9]*$'; seq "$MIN_PORT" "$MAX_PORT") | sort -R | head -n 1

设置了与名称的可执行文件get-free-port ,你可以这样做:

someprogram --port=$(get-free-port)

这不是为原生的Python的方法是可靠的,因为bash脚本不捕获端口 - 您的过程做之前另一个进程可能会抢口(竞争状态) - 但使用的工具,没有按”时,仍可能足够有用吨有它自己的尝试,尝试,再一次的做法。



Answer 6:

我是新来的Python,但我短暂的研究之后,我发现,这是典型的被绑定插座。 它只是恰巧,仍在使用的插座,您可能需要等待使用它。 或者,你可以添加:

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

这应该使可用的端口更短的时间内。 在我的情况,这让几乎立即可用的端口。



Answer 7:

我有一个树莓派,而我使用Python的Web服务器(使用瓶)。 我已经试过高于一切,唯一的解决办法是关闭终端(壳),然后再次打开它。 或重新启动树莓派 ,因为没有什么可以阻止你的Web服务器...



Answer 8:

简单的一行命令来摆脱它,以下类型命令终端,

ps -a

这将列出所有过程,结账正被在终端使用Python和型波纹管命令,

kill -9 (processID) 

例如杀-9 33178



Answer 9:

万一上述解决方案没有工作:

  1. 让你的进程侦听的端口:

    $ ps的斧头| grep的蟒蛇

  2. 杀死进程

    $杀PROCESS_NAME



文章来源: socket.error: [Errno 48] Address already in use