簡體   English   中英

HTTPserver的Python錯誤

[英]Python error with HTTPserver

您好,我有以下代碼:

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

怎么了?

嘗試更改:

svraddr = (" ", port)

至:

svraddr = ("", port)

對我來說,更改此行:

svraddr = (" ", port)

至:

svraddr = ("", port)

將解決您的問題。 這里的字符串( " " )表示套接字應“綁定”到哪個接口:它應該是與您計算機上的接口匹配的IP地址,但是如果不是,則Python似乎會嘗試查找(解決該問題) )。 " "無法解決。 ''表示“所有接口”:

對於IPv4地址,接受兩種特殊形式而不是主機地址:空字符串表示INADDR_ANY

INADDR_ANY0.0.0.0 ,因此更明確的說法是:

svraddr = ('0.0.0.0', port)

“ 0.0.0.0”表示“所有接口”。 您的Web服務器偵聽套接字綁定到的接口(大概是網卡),在這種情況下,都是所有接口。 通常,僅綁定到特定接口(如果您有多個接口)很有用; 還有一個環回接口,它使只有您的機器才能連接到網絡服務器:

svraddr = ('127.0.0.1', port)

(或者,或者使用先前使我們絆倒的名稱查找功能)

svraddr = ('localhost', port)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM