Python - 套接字错误,地址正在使用中

2 投票
4 回答
14556 浏览
提问于 2025-04-17 15:11

我现在正在尝试在 Xubuntu 12.10 x64 上设置一个 SiriServer(这不是重点),当我运行服务器时,Python 返回了一个错误。

socket.error: [Errno 98] 地址已在使用中。

这个服务器默认是想在 443 端口上运行,而这个端口是这个应用程序正常工作的必要条件。

为了确认 443 端口上是否有其他程序在运行,我执行了以下命令:

lsof -i :443

结果显示没有其他程序在运行,除非我打开了像 Chrome 或 Firefox 这样的浏览器,而我最终还是把它们关掉了。以下是我尝试运行服务器应用程序时的完整返回信息。

dustin@dustin-xubuntu:~/Applications/SiriServer$ sudo python siriServer.py
CRITICAL load_plugins Failed loading plugin due to missing module: 'Wordnik library not found. Please install wordnik library! e.g. sudo easy_install wordnik'
INFO <module> Starting Server
Traceback (most recent call last):
  File "siriServer.py", line 493, in <module>
    server = SiriServer('', options.port)
  File "siriServer.py", line 425, in __init__
    self.bind((host, port))
  File "/usr/lib/python2.7/asyncore.py", line 342, in bind
    return self.socket.bind(addr)
  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

我现在不知道该怎么办,因为这是设置这个应用程序的最后一步。任何帮助都非常感谢。

4 个回答

2

我遇到了这个错误,即使端口号大于1024也会出现。

你可以使用

    pkill -9 python

运行这个命令两次,它会列出所有被终止的Python文件。

2

这种情况经常发生在你用 ^C 或 ^Z 结束一个 Python 程序时,它没有正常退出。你可以尝试重置终端或者直接退出终端。你也可以使用 killall -9 server.py 来强制结束这个程序。

还有一种有效的方法可以帮助防止这种情况,即使你有管理员权限,如果一个连接没有正确关闭,也可能会出现这个问题。下面是一个解决办法:

s=socket.socket( )
s.bind(("0.0.0.0", 8080))
while 1:
    try:
        c, addr = s.accept()
    except KeyBoardInterrupt:
        s.close()
        exit(0)
2

你不是超级用户,这就是你的问题。在Unix系统中,要想使用1024以下的端口,你必须是超级用户。所以,输入 su 命令,然后再试试你的Python代码。或者,你可以选择使用1024到65535之间的端口。

撰写回答