【问题标题】:Python error with HTTPserverHTTPserver 的 Python 错误
【发布时间】:2014-07-05 07:18:05
【问题描述】:

您好,我有以下代码:

import os, sys
from http.server import HTTPServer, CGIHTTPRequestHandler

webdir = '.'
port = 80
if len(sys.argv) > 1: webdir = sys.argv[1]
if len(sys.argv) > 2: port = int(sys.argv[2])
print("webdir '%s', port %s" % (webdir, port))

os.chdir(webdir)
svraddr = (" ", port)
srvrobj = HTTPServer(svraddr, CGIHTTPRequestHandler)
srvrobj.serve_forever()

但是,如果我以管理员权限运行此代码,则会返回错误:

Traceback (most recent call last):
  File "C:\Users\Nitro\Desktop\web server\webserver.py", line 12, in <module>
    srvrobj = HTTPServer(svraddr, CGIHTTPRequestHandler)
  File "C:\Python33\lib\socketserver.py", line 430, in __init__
    self.server_bind()
  File "C:\Python33\lib\http\server.py", line 135, in server_bind
    socketserver.TCPServer.server_bind(self)
  File "C:\Python33\lib\socketserver.py", line 441, in server_bind
    self.socket.bind(self.server_address)
socket.gaierror: [Errno 11004] getaddrinfo failed

怎么了?

【问题讨论】:

  • Windows 计算机上的套接字错误 (Errno?) 11004 是由 Internet 设置中的文件损坏引起的。

标签: python python-3.x


【解决方案1】:

对我来说,改变这一行:

svraddr = (" ", port)

到:

svraddr = ("", port)

将解决您的问题。这里的字符串 (" ") 表示套接字应该“绑定”到哪个接口:它应该是与您机器上的接口匹配的 IP 地址,但如果不是,Python 似乎会尝试查找它(解决它)。 " " 无法解决。 '' 表示“所有接口”:

对于 IPv4 地址,接受两种特殊形式来代替主机地址:空字符串代表INADDR_ANY

INADDR_ANY0.0.0.0,所以更明确的说法是:

svraddr = ('0.0.0.0', port)

“0.0.0.0”表示“所有接口”。您的网络服务器侦听您的套接字绑定到的接口(大致是网卡),在这种情况下,所有这些接口。通常,只绑定到一个特定的接口是有用的(如果你有多个);还有环回接口,这使得只有你的机器可以连接到网络服务器:

svraddr = ('127.0.0.1', port)

(或者,使用之前让我们绊倒的名称查找功能)

svraddr = ('localhost', port)

【讨论】:

  • 我在管理员模式下尝试过,但它引发了 OSError: [Winerror 10013] 尝试以访问权限禁止的方式访问套接字。
【解决方案2】:

尝试改变:

svraddr = (" ", port)

收件人:

svraddr = ("", port)

【讨论】:

    猜你喜欢
    • 2017-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-25
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    相关资源
    最近更新 更多