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,您将看到该端口已被使用.因此,如果要在没有此消息的情况下启动服务器,则可以更改未使用的其他端口.
lun*_*chs 19
在Windows Vista/7上,使用UAC,管理员帐户默认情况下以非特权模式运行程序.
程序必须提示管理员访问,然后才能以管理员身份运行,并且必须熟悉UAC对话框.由于Python脚本不能直接执行,因此没有"以管理员身份运行"上下文菜单选项.
可以使用ctypes.windll.shell32.IsUserAnAdmin()
检测脚本是否具有管理员访问权限,以及ShellExecuteEx
python.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
迈克菲正在阻止它.我必须在访问保护规则中允许该程序
请访问http://www.symantec.com/connect/articles/we-are-unable-send-your-email-caused-mcafee
对我来说,当我有另一个进程已经在同一个端口上侦听时,它就像在Windows 7 x64上一样抱怨.
通过运行可以查看当前占用(绑定)的端口
netstat -ban
Run Code Online (Sandbox Code Playgroud)
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
您的本地端口正被另一个应用程序使用。我遇到了同样的问题!您可以尝试以下步骤:
转到命令行并以管理员身份运行它!
类型:
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)类型:
TASKKILL /F /PID 4032
Run Code Online (Sandbox Code Playgroud)=> 成功:PID 为 4032 的进程已终止。
注意:我的 5000 本地端口是由 PID 4032 列出的。你应该给你的!