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

bit*_*cle 30 python sockets compatibility windows-7 socketserver

我正在尝试使用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()
Run Code Online (Sandbox Code Playgroud)

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中自我.socket.bind(self.server_address)文件"",行1,在绑定中

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

我究竟如何在Windows 7上使用它?

[编辑于2010年5月5日@ 2344 PDT]此答案解释了该错误是由于在访问低于1024的端口时需要提升/超级用户权限.我将尝试使用更高的端口号来查看是否存在作品.但是,我仍然想知道为什么我的本地管理员帐户无法访问端口80.

Dav*_*vid 34

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

  • 在Win8上我就是这种情况 (3认同)
  • 我还可以通过更改 Win8 中的应用程序端口来解决此错误 (2认同)

lun*_*chs 19

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

程序必须提示管理员访问,然后才能以管理员身份运行,并且必须熟悉UAC对话框.由于Python脚本不能直接执行,因此没有"以管理员身份运行"上下文菜单选项.

可以使用ctypes.windll.shell32.IsUserAnAdmin()检测脚本是否具有管理员访问权限,以及ShellExecuteExpython.exe上的'runas'动词,sys.argv [0]作为参数,以在需要时提示UAC对话框.


Har*_*ngh 17

尝试在不同的端口运行服务器。为我工作:

python manage.py runserver 127.0.0.1:7000
Run Code Online (Sandbox Code Playgroud)

解释:

如 Django 文档中所述:

如果您以具有普通权限(推荐)的用户身份运行此脚本,您可能无权在低端口号上启动端口。为超级用户 (root) 保留低端口号。

该服务器使用由 WSGI_APPLICATION 设置指定的 WSGI 应用程序对象。

请勿在生产环境中使用此服务器。它没有经过安全审计或性能测试。(这就是它的保留方式。我们的工作是制作 Web 框架,而不是 Web 服务器,因此改进此服务器以处理生产环境超出了 Django 的范围。)


frm*_*ryr 11

迈克菲正在阻止它.我必须在访问保护规则中允许该程序

  1. 打开VirusScan
  2. 右键单击Access Protection,然后选择"属性"
  3. 点击"防病毒标准保护"
  4. 选择规则"防止群发邮件蠕虫发送邮件",然后单击"编辑"
  5. 将应用程序添加到要排除的进程列表,然后单击"确定"

访问http://www.symantec.com/connect/articles/we-are-unable-send-your-email-caused-mcafee


kuz*_*uz8 9

对我来说,当我有另一个进程已经在同一个端口上侦听时,它就像在Windows 7 x64上一样抱怨.

通过运行可以查看当前占用(绑定)的端口

netstat -ban
Run Code Online (Sandbox Code Playgroud)


A.H*_*DAR 6

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

烧瓶得到了这个:

意味着您试图绑定的端口已经被另一个服务或进程使用:在我的Eclipse / windows开发的代码中对此有所提示:

if __name__ == "__main__":
     # Check the System Type before to decide to bind
     # If the system is a Linux machine -:) 
     if platform.system() == "Linux":
        app.run(host='0.0.0.0',port=5000, debug=True)
     # If the system is a windows /!\ Change  /!\ the   /!\ Port
     elif platform.system() == "Windows":
        app.run(host='0.0.0.0',port=50000, debug=True)
Run Code Online (Sandbox Code Playgroud)


小智 5

您的本地端口正被另一个应用程序使用。我遇到了同样的问题!您可以尝试以下步骤:

  1. 转到命令行并以管理员身份运行它!

  2. 类型:

    netstat -ano | find ":5000"
    => TCP    0.0.0.0:5000           0.0.0.0:0              LISTENING       4032
       TCP    [::]:5000              [::]:0                 LISTENING       4032
    
    Run Code Online (Sandbox Code Playgroud)
  3. 类型:

    TASKKILL /F /PID 4032
    
    Run Code Online (Sandbox Code Playgroud)

=> 成功:PID 为 4032 的进程已终止。

注意:我的 5000 本地端口是由 PID 4032 列出的。你应该给你的!