socket.error: \[Errno 10013\] 试图以访问权限禁止的方式访问套接字

新手上路,请多包涵

我正在尝试在 Windows 7 上使用 Python 2.6.5 创建自定义 TCP 堆栈,以在本地端口 80 上提供有效的 http 页面请求。但是,我遇到了似乎 Windows 7 加强了安全性的问题。此代码适用于 Vista。

这是我的示例代码:

 import SocketServer
import struct

class MyTCPHandler(SocketServer.BaseRequestHandler):
    def handle(self):
        headerText = """HTTP/1.0 200 OK
                        Date: Fri, 31 Dec 1999 23:59:59 GMT
                        Content-Type: text/html
                        Content-Length: 1354"""
        bodyText = "<html><body>some page</body></html>"
        self.request.send(headerText + "\n" + bodyText)

if __name__ == "__main__":
    HOST, PORT = "localhost", 80
    server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler)
    server.serve_forever()

C:\python>python TestServer.py Traceback(最近一次调用):

文件“TestServer.py”,第 19 行,在 server = SocketServer.TCPServer((HOST, PORT), MyTCPHandler) 文件“C:\Python26\lib\SocketServer.py”,第 400 行,在 init self.server_bind() 文件中“C:\Python26\lib\SocketServer.py”,第 411 行,在 server_bind self.socket.bind(self.server_address) 文件“”,第 1 行,在 bind

socket.error: [Errno 10013] 试图以访问权限禁止的方式访问套接字

我究竟如何让它在 Windows 7 上工作?

[编辑于 5/5/2010 @ 2344 PDT] 这个 答案 解释了错误是由于访问低于 1024 的端口时需要提升/超级用户权限引起的。我将尝试使用更高的端口号来查看是否作品。但是,我还是想知道为什么我的本地admin账号不能访问80端口。

原文由 bitcycle 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 741
2 个回答

在 Windows Vista/7 上,使用 UAC,管理员帐户默认以非特权模式运行程序。

程序必须在以管理员身份运行之前提示管理员访问权限,并使用非常熟悉的 UAC 对话框。由于 Python 脚本不能直接执行,因此没有“以管理员身份运行”上下文菜单选项。

可以使用 ctypes.windll.shell32.IsUserAnAdmin() 来检测脚本是否具有管理员访问权限,并且 ShellExecuteEx 使用 python.exe 上的“runas”动词,以 sys.argv[0] 作为参数如果需要提示 UAC 对话框。

原文由 lunixbochs 发布,翻译遵循 CC BY-SA 3.0 许可协议

我刚遇到同样的问题,我的系统是win7。只需在终端上使用以下命令:netstat -na|findstr port,您将看到该端口已被使用。所以如果你想在没有这个消息的情况下启动服务器,你可以更改其他未使用的端口。

原文由 David 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏