自定义WSGI服务器连接失败

0 投票
2 回答
1275 浏览
提问于 2025-04-16 12:39

我刚接触Python的WSGI,想搭建自己的服务器来测试我的login.html页面(这个页面使用了AJAX)。

但是当我尝试运行我根据教程制作的WSGI.py(我的服务器)时,出现了这个错误:

追踪记录(最近的调用在最前面):
文件 "C:\Users\Print\Desktop\Website\KazCare\wsgi.py",第63行,
start_server()
文件 "C:\Users\Print\Desktop\Website\KazCare\wsgi.py",第57行,
httpd = make_server("", PORT, test_app)
文件 "C:\Python27\lib\wsgiref\simple_server.py",第144行,
server = server_class((host, port), handler_class)
文件 "C:\Python27\lib\SocketServer.py",第408行,init
self.server_bind()
文件 "C:\Python27\lib\wsgiref\simple_server.py",第48行,
HTTPServer.server_bind(self)
文件 "C:\Python27\lib\BaseHTTPServer.py",第108行,
SocketServer.TCPServer.server_bind(self)
文件 "C:\Python27\lib\SocketServer.py",第419行,
self.socket.bind(self.server_address)
文件 "C:\Python27\lib\socket.py",第224行,
return getattr(self._sock,name)(*args)
错误: [Errno 10013] 尝试以被禁止的方式访问套接字

你觉得我哪里做错了?

这是我的服务器代码:

import threading
import webbrowser
from wsgiref.simple_server import make_server

FILE = 'frontend.html'
PORT = 8080

def test_app(environ, start_response):

    if environ['REQUEST_METHOD'] == 'POST':

        try:
            request_body_size = int(environ['CONTENT_LENGTH'])
            request_body = environ['wsgi.input'].read(request_body_size)
        except (TypeError, ValueError):
            request_body = "0"

        try:
            response_body = str(int(request_body) ** 2)
        except:
            response_body = "error"

        status = '200 OK'
        headers = [('Content-type', 'text/plain')]
        start_response(status, headers)
        return [response_body]

    else:
        response_body = open(FILE).read()
        status = '200 OK'
        headers = [('Content-type', 'text/html'), ('Content-Length', str(len(response_body)))]
        start_response(status, headers)
        return [response_body]

def open_browser():
    """Start a browser after waiting for half a second."""

    def _open_browser():
        webbrowser.open('http://localhost:%s/%s' % (PORT, FILE))
        thread = threading.Timer(0.5, _open_browser)
        thread.start()

def start_server():
    """Start the server."""
    httpd = make_server("", PORT, test_app)
    httpd.serve_forever()


if __name__ == "__main__":
    open_browser()
    start_server()

2 个回答

1

我觉得你没有做错什么。听起来你没有权限去绑定那个端口。我知道在*unix系统中,这可能会是个问题,比如如果你想绑定到80端口,就需要用sudo命令来运行。不过我不太清楚在Windows上是怎么回事。你可以试着换一个不常用的端口,比如8888或者9999,看看能不能成功。你也可以尝试以管理员身份运行程序。

1

这个地址可能已经被其他东西占用了。你可以试着在你的网页浏览器里打开这个链接 http://localhost:8080/,看看有没有什么反应。

撰写回答